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

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

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

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

4 ответов


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

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


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

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


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


лучший инструмент для recostruct http-содержимого из файлов PCAP-это justniffer. Он использует prtion ядра Linux для IP-фрагментация TCP-пакета электронной reordeiring.