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.