2011-01-23 33 views
49

estoy usando tcpdump para obtener datos HTTP ejecutando el siguiente comando:¿Puedo usar tcpdump para obtener solicitudes HTTP, encabezado de respuesta y cuerpo de respuesta?

sudo tcpdump -A -s 1492 dst port 80 

El resultado del comando anterior:

  1. encabezados, creo petición y respuesta cabeceras.
  2. Datos ilegibles.
  3. La url GET /modules/mod_news_pro_gk1/cache/stories.ilbalad.ajayeb.strange-tractor.jpg.

Necesito un resultado más claro, por ejemplo, solicitud legible> encabezado de respuesta> cuerpo de respuesta, etc. ¿Cómo puedo filtrar mis resultados?

+3

Las respuestas HTTP pueden estar comprimidas o fragmentadas y obtener su texto sin formato puede no hacer realmente lo que necesita ("datos ilegibles"). Probablemente necesites explicar más completamente lo que quieres hacer y lo que permite tu entorno (por ejemplo, ¿no puedes simplemente usar un proxy HTTP como Charles o Fiddler)? – EricLaw

+0

¿Cómo ejecutó 'tcpdump' en el sistema operativo Android? ¿Incrusta de algún modo el comando en su aplicación o lo ejecuta en una PC que está conectada al teléfono Android? – faizal

+1

@faizal - debe instalar el archivo binario tcpdump en el dispositivo, luego puede ejecutarlo desde el dispositivo, utilice este enlace para Cómo instalar tcpdump en un dispositivo Android: http://gadgetcat.wordpress.com/2011/ 09/11/tcpdump-on-android/ – kimo

Respuesta

142

Hay filtros tcpdump para HTTP GET & HTTP POST (o para ambos, además del cuerpo del mensaje):

  • Ejecute man tcpdump | less -Ip examples para ver algunos ejemplos

  • Aquí hay un filtro tcpdump para HTTP GET:

    sudo tcpdump -s 0 -A 'tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x47455420' 
    
  • Aquí es un filtro de tcpdump para HTTP POST:

    sudo tcpdump -s 0 -A 'tcp dst port 80 and (tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x504f5354)' 
    
  • Monitor de tráfico HTTP incluyendo las cabeceras de petición y respuesta y el cuerpo del mensaje (source):

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

Para más información sobre el twiddling en el encabezado TCP ver: String-Matching Capture Filter Generator (enlace a la explicación de Sake Blok).

+6

No sabía nada de 'less -Ip': qué ahorro de tiempo – n611x007

+8

Me gustaría ver una explicación de las invociones de tcpdump – tmc

+0

¿cómo puedo agregar un filtro de URL al comando anterior? – erogol

34

Recomendaría usar Wireshark, que tiene una opción "Seguir ruta TCP" que hace que sea muy fácil ver las solicitudes y respuestas completas para una conexión TCP particular. Si prefiere usar la línea de comando, puede probar tcpflow, una herramienta dedicada a capturar y reconstruir el contenido de las transmisiones TCP.

Otras opciones estarían utilizando un proxy de depuración HTTP, como Charles o Fiddler como sugiere EricLaw. Estos tienen la ventaja de tener soporte específico para HTTP para facilitar el manejo de varios tipos de codificaciones y otras funciones, como guardar solicitudes para reproducirlas o editar solicitudes.

También es posible usar una herramienta como Firebug (Firefox), Web Inspector (Safari, Chrome y otros navegadores basados ​​en WebKit), o Opera Dragonfly, todos los cuales proporcionan alguna posibilidad de ver los encabezados y cuerpos de petición y respuesta (aunque la mayoría de ellos no le permiten ver el flujo de bytes exacto, sino cómo los navegadores analizaron las solicitudes).

Y, por último, siempre se puede construir solicitudes a mano, usando algo como telnet, netcat, o socat para conectarse al puerto 80 y escriba el pedido en forma manual, o una herramienta como htty para ayudar a construir fácilmente una solicitud e inspeccionar el respuesta.

+2

Muchas gracias por su respuesta Brain. Estoy usando tcpdump en el sistema operativo Android :) por lo tanto, estoy limitado usando tcpdump, de seguro puedo obtener los encabezados y también la solicitud de enlace, también necesito obtener el cuerpo, cualquier ayuda, cualquier script de conversión de Perl o algo así ? – kimo

+10

@kimo En ese caso, recomendaría usar 'tcpdump -w archivoextendido ...' para volcar los paquetes sin formato en un archivo, y luego copiarlo en su computadora, y usar Wireshark para analizarlo. Wireshark puede abrir un volcado de paquetes, decodificar la secuencia TCP y descomprimir el contenido HTTP (supongo que la razón por la que no se puede leer se debe a que está comprimido). –

+0

Gracias Brian, intentaré implementar esta solución, de todos modos es mejor mover el archivo a la PC, porque debería filtrar los datos para obtener las solicitudes deseadas, y no es fácil hacerlo en el sistema Android. – kimo

6

Aquí hay otra opción: Chaosreader

por eso es necesario para depurar una aplicación que los mensajes XML a una aplicación de 3 ª parte. Encontré un pequeño script brillante de Perl que hace todo el trabajo duro: simplemente lo tira un archivo de salida tcpdump, y hace toda la manipulación y produce todo lo que necesita ...

El script se llama chaosreader0.94.Ver http://www.darknet.org.uk/2007/11/chaosreader-trace-tcpudp-sessions-from-tcpdump/

Funcionó como un regalo, hice lo siguiente:

tcpdump host www.blah.com -s 9000 -w outputfile; perl chaosreader0.94 outputfile 
Cuestiones relacionadas