У меня есть данные 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 не увеличивает нагрузку значительно.