Назад | Перейти на главную страницу

Диссектор HTTP, который читает из pcap

У меня есть данные pcap из локального интерфейса, которые я хотел бы проанализировать. В частности, мне нужно содержимое сеансов HTTP. Я знаю много HTTP заголовок инструменты статистики, но я бы специально хотел собрать содержание каждого полного HTTP-соединения.

Есть ли какой-нибудь подходящий инструмент для сброса пакетов уровня 4 (для Linux), аналогичный тому, как tcpdump и другие работают для уровня 3, что-то, что может понимать и управлять HTTP?

Не стесняйтесь перенаправить меня, если об этом спрашивали раньше, хотя я еще не смог найти ответа на этот вопрос в SF. Спасибо!

Я подозреваю, что tcpflow будет достаточно хорошо выполнять вашу работу, которая может взять файл pcap и разделить его на составные части. Например, в качестве теста я сделал следующее:

sudo tcpdump -i eth0 -n -s 0 -w /tmp/capt -v port 80

Затем перезагрузили свой вопрос, остановились tcpdump, а затем запустил:

tcpflow -r /tmp/capt

И получил около 20 файлов, каждый из которых содержит один HTTP-запрос или ответ (в зависимости от ситуации).

С другой стороны, я обычно просто выбираю мягкий вариант и открываю свои файлы захвата в wirehark, чей режим «Анализировать -> Следуй за TCP-потоком» чертовски хорош (с цветовой кодировкой и все).

Оба этих инструмента, кстати, тоже могут выполнять захват пакетов сами - вам не нужно передавать им существующий захват пакетов через tcpdump.

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

sed '/^\r$/q' <connectionfile>

И это для получения тела запроса / ответа:

sed -n '/^\r$/,$p' <connectionfile>

(Вы также можете передать вещи через эти команды sed, если хотите).

В соединениях keepalive вам нужно начать получать небольшой скрипт, но даже тогда это примерно 20 строк скрипта для обработки двух файлов (от A до B, от B до A), извлечения заголовков, чтения Content-Length, затем чтения тело - и если вы выполняете какую-либо автоматическую обработку, вы все равно будете писать код для этого, так что небольшая обработка HTTP не увеличивает нагрузку значительно.