SharpPcap уже может захватывать пакеты таким же образом, как это делает Wireshark (только в коде, а не в графическом интерфейсе). И вы можете анализировать их напрямую или вывести их на диск в общем формате .pcap.
Шаги для анализа захвата:
- Выберите интерфейс
- Открыть соединение в случайном режиме
- Запуск захвата с использованием цикла while или обратного вызова события
- Разобрать необработанный пакет по типу, который вы хотите
Если вы читаете файлы дампа .pcap, процесс почти такой же, за исключением того, что вы вызываете офлайн-ридер захвата, вам не нужно выбирать интерфейс и не нужно устанавливать случайный режим. Все стандартные фильтры, которые используют wireshark, tcpdump и большинство других платформ Pcap, поддерживаются в SharpPcap. Для ссылки на них проверьте tcpdump man.
В настоящее время нет прямой поддержки парсинга HTTP, но парсинг TCP-пакетов действительно прост.
Когда вы получаете необработанный пакет (не проанализированный), сделайте следующее:
TCPPacket packet = TCPPacket.GetEncapsulated(rawPacket);
Парсер Packet.Net (отдельный и включенный компонент SharpPcap) способен извлекать часть TCP напрямую, даже если связь инкапсулирована VPN, PPoE или PPP.
Как только вы проанализировали TCPPacket, просто захватите пакет. PayBaytes для полезной нагрузки в байтовом массиве, который должен содержать HTTP-заголовок в необработанных байтах, который можно преобразовать в правильный текстовый формат (я не совсем уверен, используют ли заголовки HTTP Кодировка UTF-8 или ASCII на этом уровне). Для разбора заголовков HTTP должно быть много свободно доступных инструментов / библиотек.
Чтобы извлечь HTTP-пакет из TCP:
Вам необходимо собирать tcp-пакеты соединения по мере их поступления, а если данные фрагментированы (больше 1500 байт), вам нужно заново собрать части в памяти. Чтобы выяснить, какие части идут в каком порядке, необходимо тщательно отслеживать номера последовательности / подтверждения.
Это нетривиальная вещь, которую нужно выполнить с SharpPcap, потому что вы работаете с гораздо более низкой частью стека и заново собираете соединение вручную.
В Wireshark есть интересная статья о том, как этого добиться в C.
На данный момент SharpPcap не поддерживает анализ полезных данных TCP.
Если вы ищете простые в использовании примеры использования SharpPcap, скачайте дерево исходных текстов и посмотрите примеры проектов, включенных в него. Существует также руководство по для SharpPcap по codeproject .
Если у вас есть дополнительные вопросы и / или вы хотите сделать какие-либо запросы к функциям проекта, не стесняйтесь размещать сообщения в проекте SourceForge. Он далеко не мертв и продолжает активно развиваться.
Примечание. Крис Морган - руководитель проекта, а я один из разработчиков SharpPcap / Packet.Net.
Обновление: учебный проект по проекту кода теперь актуален и соответствует текущему API.