Come posso restituire solo l'intestazione Http da Tshark?


12

Sto usando Tshark per annusare i miei pacchetti e mi occupo solo dell'intestazione http (preferibilmente nella forma in cui è stata inviata, ma prenderò quello che posso ottenere).

Ho provato a usare:

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

Il che mi ha dato l'intestazione, ma anche il contenuto (che non voglio che sia una grande quantità di immondizia da analizzare). Mi interessa davvero solo l'intestazione, c'è un modo semplice per ottenerlo (oltre all'analisi dei dati da solo).

Modifica: dovrei qualificarmi, mi preoccupo anche dell'host / della porta in modo da poter tenere traccia delle richieste su più pacchetti.

Risposte:


18

È possibile utilizzare i filtri di visualizzazione dell'intestazione HTTP specifici per mostrare solo le intestazioni della richiesta, solo le intestazioni della risposta o entrambe.

Solo per le intestazioni della richiesta:

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

Solo per le intestazioni di risposta:

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

E sia per le intestazioni di richiesta che di risposta:

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

Nota: questo non filtra solo le intestazioni, ma solo i pacchetti che contengono le intestazioni, quindi probabilmente otterrai comunque alcuni dati, ma la quantità di dati dovrebbe essere inferiore a quella altrimenti.


Stiamo ancora parlando di un sacco di dati come se avessi una richiesta per en.wikipedia.org Sto tornando indietro di 750k quando in realtà voglio solo meno di 1k nelle intestazioni.
decine

tshark è uno strumento di acquisizione di pacchetti , potresti voler esaminare qualcosa come Fiddler o un altro strumento di analisi solo HTTP.
pesante

Non ho familiarità con il violinista ma il mio obiettivo è tenere traccia della velocità di connessione, quindi voglio conoscere requesttime / firstbyte / lastbyte mantenendo le intestazioni HTTP. Tshark ha già risolto gran parte del mio problema, ho solo bisogno di ottenere le intestazioni.
decine

3
Produce "tshark: filtro di acquisizione non valido" (Tshark 2.0.2). Per ovviare al problema, ho usato:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs

5

In effetti puoi! Tutte le risposte precedenti erano molto vicine. Tutto ciò che serve è un -Oflag che filtra tutte le informazioni tranne HTTP.

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

1
Questa è la risposta corretta
Florin Andrei,

3

Sono stato in grado di combinare la risposta di @heavyd ed eseguirla attraverso un filtro sed che ho ricevuto da un articolo SO - (la risposta di FJ) per cucinare questo bambino, che filtra solo le intestazioni :)

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
sed terrificante perché non riesco a leggerlo ma ha funzionato come un fascino.
Setheron,

2

La mia versione del filtro per una facile lettura:

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

In questo modo vedo solo le informazioni IP e TCP rilevanti, senza tutte le cose di basso livello, oltre alle informazioni HTTP complete.


sudo tshark -V -s0 port 80 -Y "(http.request || http.response)" | awk "/ Hypertext Transfer Protocol /, / ^ $ /"
Lmwangi,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.