2010-05-26 5 views
11

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

В соответствии с моим обсуждением в Writing an http sniffer (or any other application level sniffer), я сталкиваюсь с проблемами из-за фрагментации. Мне нужно восстановить весь поток (или дефрагментировать его), чтобы получить полный пакет HTTP, и здесь мне нужна помощь.

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

ответ

9

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

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

+1

Спасибо! Я получил смысл :) – Ishi

5

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

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

+0

Спасибо Джо ... Я попробую эти инструменты, если я не смогу сделать это сам. Еще раз спасибо ! – Ishi

2

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

2

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