Чтобы отслеживать HTTP-трафик между сервером и веб-сервером, я сейчас использую tcpdump
. Это работает нормально, но я бы хотел избавиться от некоторых лишних данных в выводе (я знаю о tcpflow
и wireshark
, но они не всегда доступны в моей среде).
Из tcpdump
страница руководства:
Чтобы распечатать все HTTP-пакеты IPv4 на порт 80 и из него, то есть печатать только пакеты, содержащие данные, а не, например, пакеты SYN и FIN и пакеты только для ACK.
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
Эта команда
sudo tcpdump -A 'src example.com и порт tcp 80 и (((ip [2: 2] - ((ip [0] & 0xf) << 2)) - ((tcp [12] & 0xf0) >> 2) )! = 0) '
обеспечивает следующий вывод:
19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: флаги [P.], seq 918827135: 918827862, ack 351213824, win 4316, options [nop, nop, TS val 4093273405 ecr 869959372], длина 727
Э ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Сервер: Apache / 2.2.3 (Red Hat) Content-Type: text / html; charset = UTF-8 Дата: Сб, 14 ноя 2009 18:35:22 GMT Возраст: 7149
Длина содержимого: 438<HTML> <HEAD> <TITLE> Пример веб-страницы </TITLE> </HEAD> <body>
<p> Вы попали на эту веб-страницу ... </p> </BODY> </HTML>
Это почти идеально, за исключением выделенной части. Что это, конец - что более важно - как мне от него избавиться? Может быть, это просто небольшая поправка к выражению в конце команды?
tcpdump печатает полные пакеты. «Мусор», который вы видите, на самом деле является заголовками пакетов TCP.
вы, конечно, можете обработать вывод, например, скриптом Perl, но почему бы вместо этого не использовать tshark, текстовую версию wirehark?
tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
он принимает те же аргументы, что и tcpdump (та же библиотека), но, поскольку это анализатор, он может выполнять глубокую проверку пакетов, поэтому вы можете еще больше уточнить свои фильтры, т.е.
tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
-R'http.request.method == "GET" || http.request.method == "HEAD"'
Взгляни на нгреп - Это может быть вам полезно.
как ссылка для других httpry [сервер, похоже, сейчас не работает, но я надеюсь, что это временно] и цирк также полезны для пассивного анализа протоколов - первый только для http, второй - для многого другого.
Пытаться httpry или Justniffer
Justniffer хорошо работает с tcp-пакетами, переупорядочивая повторные передачи и фрагментацию IP
Я бы предложил использовать упрощенную командную строку tcpdump, которая хранит все в файле pcap для пост-процесса. В зависимости от того, что именно вы смотрите на диагностику, tcpflow отлично подходит для объединения коммуникаций в связном виде для анализа.
Некоторую другую полезную информацию, включая примеры использования httpry, можно найти по адресу: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html
Используемый вами веб-сервер не ведет журналы? Несомненно, это был бы гораздо лучший способ отслеживать HTTP-трафик, существует множество инструментов для анализа данных, и любой компетентный веб-сервер должен создавать надежные журналы.
На рынке доступно несколько инструментов, разработанных специально для мониторинга HTTP-трафика. Fiddler2 (http://www.fiddler2.org) и HTTP-отладчик Pro примеры таких инструментов.
Ваша «проблема» при использовании TCPDUMP заключается в том, что он показывает вам содержимое заголовка пакета.
Если вы все еще хотите использовать TCPDUMP, просто удалите -А. Это должно удалить это из вывода.
sudo tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'