Моніторинг трафіку 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: Прапори [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 ОК сервер: 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, але чому б не використовувати замість цього текстовий варіант wireshark tshark?

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 -d tcp.port == 8070, http -R 'http.request або http.response'". Тепер якби я міг отримати так, щоб «слідкував за потоком tcp» так само, як може і проводка (це дуже багато запитують, але відповіді я досі не знайшов). "-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 для ngrep. Дуже корисний засіб.
tylerl

ngrep і httpry, безумовно, корисні, але ngrep не знає HTTP та AFAIK, httpry працює лише з заголовками HTTP і не може відображати дані корисного навантаження.
otto.poellath

@sapporo - впевнено - ngrep є протокольним, але ви можете додати pcap фільтр "порт 80" і отримати .. в [більшості випадків] http трафіку.
pQd

Імо, ngrep на 100000 разів краще, ніж tcpdump
Daniel W.

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
Ясно. Я думаю, він уже про це думав. Іноді корисно відстежувати фактичні дані, що надсилаються між точкою А та точкою В.
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.