Jak zwrócić tylko nagłówek HTTP z tshark?


12

Używam tshark do wąchania moich pakietów i martwię się tylko nagłówkiem http (najlepiej w formie, w jakiej został wysłany, ale wezmę to, co mogę dostać).

Próbowałem użyć:

tshark tcp port 80 or tcp port 443 -V -R "http"

Co dało mi nagłówek, ale także treść (której nie chcę, ponieważ jest to duża ilość śmieci do przeanalizowania). Naprawdę dbam tylko o nagłówek, czy jest jakiś prosty sposób na uzyskanie tego (oprócz samodzielnego parsowania danych).

Edycja: powinienem się zakwalifikować, dbam również o host / port, aby móc śledzić żądania w wielu pakietach.

Odpowiedzi:


18

Możesz użyć określonych filtrów wyświetlania nagłówków HTTP, aby wyświetlić albo tylko nagłówki żądań, tylko nagłówki odpowiedzi lub oba.

Tylko nagłówki żądania:

tshark tcp port 80 or tcp port 443 -V -R "http.request"

Tylko nagłówki odpowiedzi:

tshark tcp port 80 or tcp port 443 -V -R "http.response"

I w przypadku nagłówków żądania i odpowiedzi:

tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response"

Uwaga: To nie odfiltrowuje tylko nagłówków, tylko pakiety zawierające nagłówki, więc prawdopodobnie nadal będziesz otrzymywać pewne dane, ale ilość danych powinna być mniejsza niż w przeciwnym razie.


Wciąż mówimy o masie danych, tak jakbym poprosił o en.wikipedia.org. Otrzymuję 750 000, gdy naprawdę chcę tylko mniej niż 1 000 nagłówków.
— tzenes

tshark to narzędzie do przechwytywania pakietów , możesz zajrzeć do czegoś takiego jak Fiddler lub inne narzędzie do analizy oparte tylko na HTTP.
— heavyd

Nie jestem zaznajomiony ze skrzypkiem, ale moim celem jest śledzenie przepustowości połączenia, dlatego chcę znać requesttime / firstbyte / lastbyte, zachowując nagłówki HTTP. tshark już rozwiązał większość mojego problemu, muszę tylko zdobyć nagłówki.
— tzenes

3
Wytwarza „tshark: nieprawidłowy filtr przechwytywania” (Tshark 2.0.2). Jako obejście zastosowałem:tshark -V -Y http.request tcp port 80 or tcp port 443
— jfs

5

W rzeczywistości możesz! Wszystkie poprzednie odpowiedzi były bardzo zbliżone. Wszystko czego potrzebujesz to -Oflaga, która odfiltrowuje wszystkie informacje oprócz HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443

1
To jest poprawna odpowiedź.
— Florin Andrei

3

Byłem w stanie połączyć odpowiedź z @heavyd i przepuścić ją przez filtr sed otrzymany z artykułu SO - (odpowiedź FJ), aby ugotować to dziecko, które odfiltrowuje tylko nagłówki :)

sudo tshark tcp port 80 or tcp port 443 -V -R "http.request || http.response" | sed -rn '/Hypertext Transfer Protocol/{:a;N;/    \\r\\n:?/{/.*/p;d};ba}' >> /tmp/filtered

1
przerażające, bo nie mogę tego przeczytać, ale działało jak urok.
— Setheron

2

Moja własna wersja filtru do łatwego czytania:

tshark -V -R "tcp.port ==80 && (http.request || http.response)" | awk "/Hypertext Transfer Protocol/,/Frame/ { print };/Transmission Control Protocol/{print};/Internet Protocol/{print}" | grep -v Frame

W ten sposób widzę tylko istotne informacje IP i TCP, bez wszystkich rzeczy niskiego poziomu, a także pełne informacje HTTP.


sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
— Lmwangi
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.