Восстановление данных из PCAP sniff

Я пытаюсь обнюхать данные HTTP через libpcap и получить все содержимое http (заголовок + полезная нагрузка) после обработки полезной нагрузки TCP.

В соответствии с моим обсуждением на Написание http-сниффера (или любого другого сниффера уровня приложения), я столкнулся с проблемами из-за фрагментации - мне нужно восстановить весь поток (или дефрагментировать его), чтобы получить полный HTTP-пакет, и здесь мне нужна помощь.

Спасибо в ожидании!

Ответ 1

Это действительно очень просто. Просто возьмите кадры ethernet, которые вы получаете из pcap, и извлеките из них IP-пакеты, повторно собрав все фрагментированные. Затем переупорядочивайте сегменты TCP из IP-пакетов в соответствии с порядковыми номерами, обращая внимание на то, что вы удаляете любые повторяющиеся данные. Затем обработайте поток как поток HTTP. Конечно, HTTP не поступает в пакеты; это протокол прикладного уровня, но я уверен, что это будет очевидно, как только вы выполнили всю эту другую работу. Обратите внимание, как вы все это делаете для проверки заголовков IP и сегментов TCP, чтобы убедиться, что ваши данные верны. Кроме того, если pcap пропускает какие-либо пакеты, убедитесь, что вы справляетесь с этим соответствующим образом.

Чтобы помочь вам в стек TCP для Linux, следует предоставить краткую ссылку на этот процесс, как это происходит в ядре.

Ответ 2

Вместо повторной сборки потоков вы можете использовать tcptrace, чтобы собрать файл pcap. Я верю, что -e сделает это.

После того, как у вас есть данные уровня приложения в одном фрагменте, вы можете применить простой анализ HTTP-заголовков.... Перфекты из библиотеки, такие как http://github.com/ry/http-parser

Ответ 3

Чтобы восстановить данные, содержащиеся в файле pcap, замечательным инструментом является Xplico: http://www.xplico.org

Ответ 4

Лучший инструмент для перепрограммирования http-содержимого из файлов pcap - justniffer. Он использует prtion ядра linux для реорганизации IP-фрагментации e tcp.

Ответ 5

PCapPlusPlus включает в себя пример консольной программы TCPReassembly, которая анализирует трафик и выводит каждый поток в отдельный текстовый файл. Вы можете указать, какой поток слушать, среди множества вариантов.

В документации также упоминается приложение Linux tcpflow с еще большим количеством опций.