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.

tzenes
źródło

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.

ciężki
źródło
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
Denis Bazhenov
źródło
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
szybka zmiana
źródło
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.

Miquel Adrover
źródło
sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
Lmwangi