SharpPcap уже способен захватывать пакеты таким же образом, что и wirehark (только в коде, а не в графическом интерфейсе). И вы можете либо проанализировать их напрямую, либо вы можете отправить их на диск в общий формат файла .pcap.
Шагов для разбора захвата являются:
- Выберите интерфейс
- открыть соединение в беспорядочном режиме
- Старт захват либо с помощью цикла во время или обратного вызова события
- Синтаксического сырье пакет к типу, который вы хотите
Если вы читаете файлы дампа .pcap, процесс почти такой же e Если вы вызываете автономный считыватель захвата, вам не нужно выбирать интерфейс и не нужно устанавливать беспорядочный режим. Все стандартные фильтры, которые используют wirehark, tcpdump и большинство других фреймворков Pcap, поддерживаются в SharpPcap. Для ссылки на них проверьте tcpdump man.
В настоящее время нет поддержки для парсинга HTTP напрямую, но синтаксический анализ пакетов TCP очень прост.
Когда вы получаете необработанный пакет (не разобранное) это сделать:
TCPPacket packet = TCPPacket.GetEncapsulated(rawPacket);
пакета.Net (отдельный и включенный компонент SharpPcap) анализатор способен вытащить часть TCP напрямую, даже если связь инкапсулирована VPN, PPoE или PPP.
После того, как вы проанализировали TCPPacket, просто возьмите пакет.PayloadBytes для полезной нагрузки в массиве байтов, который должен содержать заголовок HTTP в необработанных байтах, которые могут быть преобразованы в правильный текстовый формат (я не уверен, что HTTP-заголовки используйте кодировку UTF-8 или ASCII на этом уровне). Для анализа HTTP-заголовков должно быть достаточно свободно доступных инструментов/библиотек.
Чтобы извлечь пакет HTTP из TCP:
Вы должны собрать TCP пакеты соединения, как они приходят и, если данные будут фрагментированы (больше 1500 байт), необходимо повторно собрать детали в памяти. Чтобы узнать, какие части идут в каком порядке, вам нужно тщательно отслеживать номера последовательности/подтверждения.
Это простая вещь, которую можно выполнить с помощью SharpPcap, потому что вы работаете с гораздо более низкой частью стека и вручную собираете соединение вручную.
Wireshark имеет интересную статью о том, как сделать это в C.
Как прямо сейчас, SharpPcap не поддерживает TCP полезной нагрузки разборе.
Если вы ищете простой в последующие примеры того, как использовать SharpPcap скачать дерево исходных текстов и посмотреть на примере проектов, включенных. Существует также tutorial for SharpPcap on codeproject.
Если у вас есть дополнительные вопросы и/или вы хотите сделать какие-либо пожелания по проекту, не стесняйтесь размещать их в проекте SourceForge. Он далеко не мертв и продолжает активно развиваться.
Примечание: Крис Морган является руководителем проекта, и я один из разработчиков SharpPcap/Packet.Net.
Обновление: Учебный проект по проекту кода теперь обновлен, чтобы соответствовать текущему API.
'GetEncapsulated' равно' Packet.ParsePacket (e.Packet.LinkLayerType, e.Packet.Data); 'правильно? – C4u