Monitoreo del tráfico HTTP usando tcpdump

42

Para monitorear el tráfico HTTP entre un servidor y un servidor web, actualmente estoy usando tcpdump. Esto funciona bien, pero me gustaría deshacerme de algunos datos superfluos en la salida (lo sé tcpflowy wiresharkno están disponibles en mi entorno).

Desde la tcpdumppágina del manual:

Para imprimir todos los paquetes HTTP IPv4 hacia y desde el puerto 80, es decir, imprimir solo los paquetes que contienen datos, no, por ejemplo, los paquetes SYN y FIN y los paquetes solo ACK.

tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

Este comando

sudo tcpdump -A 'src example.com y tcp puerto 80 y (((ip [2: 2] - ((ip [0] & 0xf) << 2)) - ((tcp [12] & 0xf0) >> 2) )! = 0) '

proporciona el siguiente resultado:

19: 44: 03.529413 IP 192.0.32.10.http> 10.0.1.6.52369: Banderas [P.], seq 918827135: 918827862, ack 351213824, win 4316, opciones [nop, nop, TS val 4093273405 ecr 869959372], longitud 727

E ..... @ ....... .... P..6.0 ......... D ...... __ .. e = 3 ...__ HTTP / 1.1 200 OK Servidor: Apache / 2.2.3 (Red Hat) Tipo de contenido: texto / html; charset = UTF-8 Fecha: sábado, 14 de noviembre de 2009 18:35:22 GMT Edad: 7149
Duración del contenido: 438

<HTML> <HEAD> <TITLE> Ejemplo de página web </TITLE> </HEAD> <body>
<p> Ha llegado a esta página web ... </p> </BODY> </HTML>

Esto es casi perfecto, excepto por la parte resaltada. ¿Qué es esto, final, más importante, cómo me deshago de él? ¿Tal vez es solo un pequeño ajuste a la expresión al final del comando?

otto.poellath
fuente

Respuestas:

39

tcpdump imprime paquetes completos. "Basura" que ves son en realidad encabezados de paquete TCP.

sin duda puede dar masajes a la salida, es decir, un script perl, pero ¿por qué no usar tshark, la versión textual de wireshark en su lugar?

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

toma los mismos argumentos que tcpdump (misma biblioteca) pero como es un analizador puede hacer una inspección profunda de paquetes para que pueda refinar aún más sus filtros, es decir

tshark 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)' -R'http.request.method == "GET" || http.request.method == "HEAD"'

Aleksandar Ivanisevic
fuente
1
Gracias, después de probar todas las sugerencias, tshark parece ser la mejor herramienta para el trabajo. Actualmente estoy usando "tshark -d tcp.port == 8070, http -R 'http.request o http.response'". Ahora, si tan solo pudiera hacer que tshark "siguiera la transmisión tcp" tal como puede hacerlo Wirehark (Esto se pregunta mucho, pero aún no he encontrado la respuesta). "-V" muestra información sobre los paquetes TCP e IP, etc., lo que no me interesa. Pero supongo que puedo eliminar eso usando un script.
otto.poellath
44
También puede buscar "GET" en un filtro de captura, haciendo coincidir los valores ASCII para cada personaje: tcp port 80 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420. Agregué una página al sitio web de Wireshark hace un tiempo que lo ayuda a crear filtros de captura de coincidencia de cadenas: wireshark.org/tools/string-cf.html
Gerald Combs
18

Eche un vistazo a ngrep : puede ser útil para usted.

como referencia para otros httpry [el servidor parece estar inactivo ahora pero espero que sea temporal] y tshark también son útiles para el análisis de protocolo pasivo, primero solo para http, segundo, para mucho más.

pQd
fuente
2
+1 para ngrep. Herramienta muy útil.
tylerl
ngrep y httpry parecen definitivamente útiles, pero ngrep desconoce HTTP y AFAIK, httpry solo funciona con encabezados HTTP y no puede mostrar los datos de la carga útil.
otto.poellath
@sapporo - seguro - ngrep es independiente del protocolo, pero puede agregar el filtro pcap "puerto 80" y obtener ... en [la mayoría de los casos] tráfico http solamente.
pQd
Imo, ngrep es 100000x mejor que tcpdump
Daniel W.
5

Prueba httpry o justniffer

Justniffer funciona bien en paquetes tcp reordenando retrasmisiones y fragmentación de ip

Mole24
fuente
1
¡Gracias! justniffer es lo que estaba buscando (creo que es la única herramienta mencionada que es muy simple y mide la duración de la solicitud).
gkop
1

Sugeriría usar una línea de comando tcpdump tonta que almacena todo en un archivo pcap para el proceso posterior. Dependiendo de lo que esté buscando exactamente para diagnosticar, tcpflow funciona muy bien para volver a unir las comunicaciones de manera coherente para el análisis.

Se puede encontrar otra buena información que incluye algunos usos para httpry en: http://taosecurity.blogspot.com/2008/06/logging-web-traffic-with-httpry.html

ScottZ
fuente
0

¿El servidor web que está utilizando no produce registros? Seguramente sería una forma mucho mejor de monitorear el tráfico HTTP, hay una gran cantidad de herramientas para analizar los datos y cualquier servidor web competente debería producir registros confiables.

JamesHannah
fuente
44
Claramente. Sin embargo, me imagino que ya pensó en eso. A veces es útil para monitorizar los datos reales que se envían entre el punto A y el punto B.
tylerl
0

Hay varias herramientas disponibles en el mercado diseñadas especialmente para monitorear el tráfico HTTP. Fiddler2 ( http://www.fiddler2.org ) y HTTP Debugger Pro son ejemplos de tales herramientas.


fuente
44
Gracias por sus sugerencias Desafortunadamente, ambas herramientas parecen funcionar solo en Windows. No lo había mencionado, pero estoy buscando algo que funcione en Linux.
otto.poellath