¿Cómo devuelvo solo el encabezado Http de tshark?

12

Estoy usando tshark para oler mis paquetes y solo me preocupa el encabezado http (preferiblemente en la forma en que se envía, pero tomaré lo que pueda obtener).

Intenté usar:

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

Lo que me dio el encabezado, pero también el contenido (que no quiero porque es una gran cantidad de basura para analizar). Realmente solo me importa el encabezado, ¿hay alguna manera fácil de obtener eso (aparte de analizar los datos yo mismo)?

Editar: debo calificar También me preocupo por el host / puerto para poder hacer un seguimiento de las solicitudes en múltiples paquetes.

tzenes
fuente

Respuestas:

18

Puede usar los filtros de visualización de encabezado HTTP específicos para mostrar solo los encabezados de solicitud, solo los encabezados de respuesta o ambos.

Solo para los encabezados de solicitud:

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

Solo para los encabezados de respuesta:

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

Y para los encabezados de solicitud y respuesta:

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

Nota: Esto no filtra solo los encabezados, solo los paquetes que contienen los encabezados, por lo que es probable que aún obtenga algunos datos, pero la cantidad de datos debería ser menor de lo que sería de otra manera.

pesado
fuente
Todavía estamos hablando de una tonelada de datos como si tuviera una solicitud para en.wikipedia.org. Estoy recuperando 750k cuando realmente solo quiero menos de 1k en encabezados.
tzenes
tshark es una herramienta de captura de paquetes , es posible que desee buscar algo como Fiddler u otra herramienta de análisis solo HTTP.
heavyd
No estoy familiarizado con el violinista, pero mi objetivo es rastrear el rendimiento de la conexión, por lo que quiero saber requesttime / firstbyte / lastbyte mientras conserva los encabezados HTTP. tshark ya resuelve la mayor parte de mi problema, solo necesito obtener los encabezados.
tzenes
3
Produce "tshark: filtro de captura inválido" (Tshark 2.0.2). Como solución alternativa, he usado:tshark -V -Y http.request tcp port 80 or tcp port 443
jfs
5

De hecho puedes! Todas las respuestas anteriores fueron muy cercanas. Todo lo que necesita es una -Obandera que filtre toda la información excepto HTTP.

tshark -O http -R http.request tcp port 80 or tcp port 443
Denis Bazhenov
fuente
1
Esta es la respuesta correcta.
Florin Andrei
3

Pude combinar la respuesta de @heavyd y ejecutarla a través de un filtro de sed que obtuve de un artículo SO - (respuesta de FJ) para cocinar a este bebé, que filtra solo los encabezados :)

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
quickshiftin
fuente
1
aterrador sed porque no puedo leerlo pero funcionó a las mil maravillas.
Setheron
2

Mi propia versión de filtro para una fácil lectura:

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

De esta manera, solo veo información relevante de IP y TCP, sin todas las cosas de bajo nivel, más la información HTTP completa.

Miquel Adrover
fuente
sudo tshark -V -s0 puerto 80 -Y "(http.request || http.response)" | awk "/ Protocolo de transferencia de hipertexto /, / ^ $ /"
Lmwangi