Monitorowanie ruchu HTTP za pomocą tcpdump


42

Obecnie używam do monitorowania ruchu HTTP między serwerem a serwerem WWW tcpdump. Działa to dobrze, ale chciałbym pozbyć się zbędnych danych wyjściowych (wiem o tcpflowi wireshark, ale nie są one łatwo dostępne w moim środowisku).

Ze strony podręcznika tcpdump:

Aby wydrukować wszystkie pakiety HTTP IPv4 do iz portu 80, tzn. Wydrukować tylko pakiety zawierające dane, nie na przykład pakiety SYN i FIN oraz pakiety tylko ACK.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

To polecenie

sudo tcpdump -A 'src example.com i tcp port 80 i (((ip [2: 2] - ((ip [0] i 0xf) << 2)) - ((tcp [12] i 0xf0) >> 2) )! = 0) ”

zapewnia następujące dane wyjściowe:

19: 44: 03.529413 IP 192.0.32.10. Http: 10.0.1.6.52369: Flagi [P.], seq 918827135: 918827862, ack 351213824, win 4316, opcje [nop, nop, TS val 4093273405 ecr 869959372], długość 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Serwer: Apache / 2.2.3 (Red Hat) Content-Type: text / html; charset = UTF-8 Data: sob., 14 listopada 2009 18:35:22 GMT Wiek: 7149
Długość treści: 438

<HTML> <HEAD> <TITLE> Przykładowa strona internetowa </TITLE> </HEAD> <body>
<p> Dotarłeś do tej strony ... </p> </BODY> </HTML>

Jest to prawie idealne, z wyjątkiem podświetlonej części. Co to jest, koniec - co ważniejsze - jak się go pozbyć? Może to tylko drobna modyfikacja wyrażenia na końcu polecenia?

Odpowiedzi:


39

tcpdump drukuje kompletne pakiety. „Śmieci”, które widzisz, są tak naprawdę nagłówkami pakietów TCP.

z pewnością możesz masować dane wyjściowe za pomocą np. skryptu perl, ale dlaczego nie użyć tshark, tekstowej wersji wireshark?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

pobiera te same argumenty co tcpdump (ta sama biblioteka), ale ponieważ jest analizatorem, może przeprowadzać głęboką kontrolę pakietów, dzięki czemu można jeszcze bardziej udoskonalić filtry, tj.

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
Dzięki - po wypróbowaniu wszystkich sugestii, tshark wydaje się najlepszym narzędziem do pracy. Obecnie używam „tshark -d tcp.port == 8070, http -R„ http.request lub http.response ””. Teraz gdybym tylko mógł zmusić tshark do „podążania za strumieniem tcp”, tak jak może to zrobić wireshark (często się o to pyta, ale wciąż nie znalazłem odpowiedzi). „-V” wyświetla informacje o pakietach TCP i IP itd., Które mnie nie interesują. Wydaje mi się, że mogę to usunąć za pomocą skryptu.
otto.poellath

4
Można też szukać „get” w filtrze przechwytywania dopasowując wartości ASCII dla każdej postaci: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Jakiś czas temu dodałem stronę do witryny Wireshark, która pomaga tworzyć filtry przechwytywania pasujących ciągów: wireshark.org/tools/string-cf.html
Gerald Combs,

18

spójrz na ngrep - może ci się przydać.

jako odniesienie dla innych httpry [serwer wydaje się być wyłączony, ale mam nadzieję, że jest tymczasowy] i tshark są również przydatne do pasywnej analizy protokołu - pierwsza tylko dla http, druga - dla znacznie więcej.


2
+1 za ngrep. Bardzo przydatne narzędzie.
tylerl

ngrep i httpry wyglądają zdecydowanie przydatne, ale ngrep nie zna HTTP i AFAIK, httpry działa tylko z nagłówkami HTTP i nie może wyświetlać danych ładunku.
otto.poellath

@sapporo - pewnie - ngrep jest niezależny od protokołu, ale możesz dodać filtr pcap „port 80” i uzyskać… w [większości przypadków] tylko ruch http.
pQd,

Imo, ngrep jest 100000x lepszy niż tcpdump
Daniel W.,

5

Spróbuj httpry lub justniffer

Justniffer działa dobrze w przypadku pakietów tcp zmieniających kolejność retrasmycji i fragmentacji adresów IP


1
Dzięki! justniffer był tym, czego szukałem (myślę, że to jedyne wspomniane narzędzie, które jest bardzo proste i mierzy czas trwania żądania).
gkop


0

Czy używany serwer sieciowy nie tworzy dzienników? Z pewnością byłby to znacznie lepszy sposób monitorowania ruchu HTTP, istnieje mnóstwo narzędzi do analizy danych, a każdy kompetentny serwer sieciowy powinien generować wiarygodne dzienniki.


4
Wyraźnie. Wyobrażam sobie, że już o tym pomyślał. Czasami przydatne jest monitorowanie rzeczywistych danych przesyłanych między punktem A a punktem B.
tylerl

0

Na rynku dostępnych jest kilka narzędzi zaprojektowanych specjalnie do monitorowania ruchu HTTP. Przykłady takich narzędzi to Fiddler2 ( http://www.fiddler2.org ) i HTTP Debugger Pro .


4
Dziękuję za twoje sugestie. Niestety oba narzędzia działają tylko w systemie Windows. Nie wspomniałem o tym, ale szukam czegoś, co działa na Linuksie.
otto.poellath
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.