Мониторинг HTTP-трафика с помощью tcpdump


42

Для мониторинга 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: Flags [P.], seq 918827135: 918827862, ack 351213824, win 4316, опции [nop, nop, TS val 4093273405 ecr 869959372], длина 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Сервер: Apache / 2.2.3 (Red Hat) Тип содержимого: текст / html; charset = UTF-8 Дата: сб, 14 ноября 2009 18:35:22 GMT Возраст: 7149
Длина контента: 438

<HTML> <HEAD> <TITLE> Пример веб-страницы </ TITLE> </ HEAD> <body>
<p> Вы достигли этой веб-страницы ... </ p> </ BODY> </ HTML>

Это почти идеально, за исключением выделенной части. Что это, конец - что более важно - как мне избавиться от этого? Может быть, это просто немного подправить выражение в конце команды?

Ответы:


39

tcpdump печатает полные пакеты. «Мусор», который вы видите, на самом деле является заголовками пакетов TCP.

Вы можете, конечно, помассировать вывод с помощью сценария perl, но почему бы не использовать вместо этого tshark, текстовую версию wireshark?

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"'


1
Спасибо - после опробования всех предложений, tshark кажется лучшим инструментом для работы. В настоящее время я использую "tshark -d tcp.port == 8070, http -R 'http.request или http.response'". Теперь, если бы я только мог заставить tshark «следить за потоком tcp» так же, как это делает wireshark (об этом часто спрашивают, но я до сих пор не нашел ответа). «-V» отображает информацию о пакетах TCP и IP и т. Д., Которые меня не интересуют. Но я думаю, что могу удалить это с помощью скрипта.
otto.poellath

4
Вы можете также искать «GET» в фильтре захвата путем сопоставления значений ASCII для каждого символа: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Некоторое время назад я добавил страницу на веб-сайт Wireshark, которая поможет вам создать фильтры захвата соответствия строк: wireshark.org/tools/string-cf.html
Gerald Combs,

18

взгляните на ngrep - он может быть вам полезен.

в качестве ссылки для других httpry [сервер, кажется, сейчас не работает, но я надеюсь, что он временный] и tshark также полезны для пассивного анализа протокола - первый только для http, второй - для гораздо большего.


2
+1 за нгреп. Очень полезный инструмент.
Tylerl

ngrep и httpry выглядят определенно полезными, но ngrep не знает о HTTP и AFAIK, httpry работает только с заголовками HTTP и не может отображать данные полезной нагрузки.
otto.poellath

@sapporo - уверен - ngrep не зависит от протокола, но вы можете добавить фильтр pcap "порт 80" и получать .. в большинстве случаев только http-трафик.
PQD

Imo, ngrep в 100000 раз лучше, чем tcpdump
Дэниел У.

5

Попробуйте httpry или justniffer

Justniffer хорошо работает над пересылкой tcp-пакетов и фрагментацией ip


1
Благодарность! Justniffer - это то, что я искал (я думаю, что это единственный упомянутый инструмент, который очень прост и измеряет длительность запроса).
gkop

1

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

Некоторую другую полезную информацию, включая некоторые способы использования httpry, можно найти по адресу: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html.


0

Разве используемый вами веб-сервер не создает журналы? Конечно, это был бы гораздо лучший способ отслеживать HTTP-трафик, существует множество инструментов для анализа данных, и любой компетентный веб-сервер должен создавать надежные журналы.


4
Ясно. Я думаю, что он уже думал об этом, хотя. Иногда полезно отслеживать фактические данные, отправляемые между точкой A и точкой B.
Tylerl

0

На рынке доступно несколько инструментов, разработанных специально для мониторинга HTTP-трафика. Fiddler2 ( http://www.fiddler2.org ) и HTTP Debugger Pro являются примерами таких инструментов.


4
Спасибо за ваши предложения. К сожалению, оба инструмента работают только на Windows. Я не упоминал об этом, но я ищу что-то, что работает в Linux.
otto.poellath
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.