Я пытаюсь осуществить сниффинг данных HTTP через libpcap и получить все http содержание (header+payload) после обработки полезной нагрузки TCP.
Согласно моему обсуждению при Записи http сниффера (или любого другого сниффера прикладного уровня), я сталкиваюсь с проблемами из-за фрагментации - я должен восстановить целый поток (или дефрагментировать его) получить полный пакет HTTP, и это - то, где я нуждаюсь в некоторой помощи.
Спасибо в ожидании!!
Это действительно очень просто. Просто возьмите кадры Ethernet, которые вы получаете от pcap, и извлеките из них IP-пакеты, повторно собрав все фрагментированные. Затем измените порядок сегментов TCP из IP-пакетов в соответствии с порядковыми номерами, обращая внимание на то, чтобы удалить все повторяющиеся данные. Затем обработайте поток как поток HTTP. Конечно, HTTP не приходит в виде пакетов; это протокол прикладного уровня, но я уверен, что это станет очевидно, когда вы выполните всю остальную работу. При выполнении всех этих действий обратите внимание на контрольную сумму заголовков IP и сегментов TCP, чтобы убедиться, что ваши данные верны. Кроме того, если pcap пропускает какие-либо пакеты, убедитесь, что вы правильно с этим справляетесь.
Чтобы помочь вам в работе со стеком TCP Linux , необходимо предоставить краткую ссылку на этот процесс, как он происходит в ядре.
Вместо того, чтобы самостоятельно собирать потоки, вы можете использовать tcptrace для повторной сборки файла pcap. Я считаю, что -e
подойдет.
Как только у вас есть данные уровня приложения в одном куске, вы можете применить простой синтаксический анализ HTTP-заголовка .... Возможно, из библиотеки, такой как http://github.com/ry/http-parser