¿Cómo inspeccionar las solicitudes HTTP salientes de una sola aplicación?

70

Mi aplicación está enviando solicitudes HTTP a algún servidor y quiero ver los datos reales que está enviando. Algunos detalles que me gustaría ver:

  • Método de solicitud (GET / POST / PUT, etc.)
  • Tipo de contenido
  • Cuerpo

¿Cuál es la mejor y más simple forma de lograr esto?

megas
fuente
"método de solicitud, tipo de contenido, cuerpo y etc." ¿Estás hablando de inspección específica de HTTP? ¿Es HTTPS (asegurado) por casualidad?
gertvdijk
Sí, tienes razón, pero no se envía por navegador
megas
Lo sentimos, solo son solicitudes HTTP
megas
3
Está bien, entonces está bien. ¿Es solo uno o un pequeño conjunto de servidores con los que está hablando? ¿Y ninguna otra aplicación está hablando con esos servidores? Si ambos son afirmativos, entonces la respuesta sobre Wireshark es a lo que iría. Aprende cómo funciona. No es tan dificil.
gertvdijk

Respuestas:

71

Bueno, para todos esos fanáticos de tcpdump =)

¡CORRE TODOS ESTOS MANDOS COMO RAÍZ!

Obtener root en una terminal con

sudo -i

Para capturar los paquetes RAW ...

sudo tcpdump -i any -w /tmp/http.log &

Esto captura todos los paquetes crudos, en todos los puertos, en todas las interfaces y escribir en un archivo, /tmp/http.log.

Ejecute su aplicación Obviamente, ayuda si no ejecuta ninguna otra aplicación que use HTTP (navegadores web).

Matar tcpdump

killall tcpdump

Para leer el registro, use la -Abandera y canalice la salida a less:

tcpdump -A -r /tmp/http.log | less

La -Abandera imprime la "carga útil" o el texto ASCII en los paquetes. Esto enviará la salida a less, puede subir y bajar la página. Para salir less, escriba Q.

Cuando voy a Google, veo (en los paquetes sin formato):

20:42:38.179759 IP ufbt.local.56852 > sea09s02-in-f3.1e100.net.www: Flags [P.], seq 1:587, ack 1, win 913, options [nop,nop,TS val 25523484 ecr 492333202], length 586
E..~.v@[email protected]......!#...P.(.gS.c..............u..Xh.GET /generate_204 HTTP/1.1
Host: clients1.google.com
Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/534.34 (KHTML, like Gecko) rekonq Safari/534.34
Referer: http://www.google.com/
Accept: */*
Accept-Encoding: gzip, deflate, x-gzip, x-deflate
Accept-Charset: utf-8,*;q=0.5
Accept-Language: en-US, en-US; q=0.8, en; q=0.6
Cookie: PREF=ID=dd958d4544461998:FF=0:TM=1323842648:LM=1360205486:S=Fg_QCDsLMr4ZepIo; NID=67=OQJWjIDHG-B8r4EuM19F3g-nkaMcbvYwoY_CsOjzvYTOAxwqAos5kfzsk6Q14E70gIfJjHat8d8PuQIloB12BE-JuSHgsKHR2QSpgN12qSWoxeqhdcSQgzw5CHKtbR_a

tcpdumptiene un largo conjunto de opciones para refinar la recopilación de datos desde la especificación de interfaces de red a puertos a direcciones IP de origen y destino. NO puede descifrar (por lo que no funcionará con HTTPS).

Una vez que sepa lo que le interesa, puede usar varias opciones tcpdumppara registrar solo los datos de interés. La estrategia general es primero registrar todos los paquetes, revisar los datos sin procesar y luego capturar solo los paquetes de interés.

Algunas banderas útiles (opciones):

-i Specify an interface
-i eth0

tcp port xx
tcp port 80

dst 1.2.3.4
specify a destination ip address

Hay una curva de aprendizaje, tanto para usar tcpdumpcomo para aprender a analizar los datos que recopila. Para leer más, sugiero encarecidamente el tcpdumpManual de Daniel Miessler con ejemplos .

Pantera
fuente
1
Esto no captura nada en mi Ubuntu 14.04. Mi computadora portátil se conecta a Internet a través de un enrutador wifi. ¿Eso marcaría una diferencia en el uso de tcpdump? Cuando lo mato, solo dice 0 packets captured 0 packets received by filter 0 packets dropped by kernel Pero abrí un montón de sitios en el navegador Chrome cuando tcpdump estaba monitoreando.
faizal
1
ahh el artículo vinculado ayudó. tcpdump -i any -w /tmp/http.log &trabajó.
faizal
22

Primera instalación tcpflowdesde los repositorios oficiales de Ubuntu:

sudo apt-get install tcpflow

Luego ejecute este comando para inspeccionar todas las solicitudes HTTP en el puerto estándar:

sudo tcpflow -p -c port 80
Vanni Totaro
fuente
1
y donde ver los resultados? ¡Gracias!
Gediminas
2
@Gediminas puedes ver la salida en la terminal. Tenga en cuenta que el tráfico HTTPS no se muestra. Intente visitar uno HTTP como httpvshttps.com
Vanni Totaro
1
Mucho más conveniente que el tcpdump si solo está interesado en ver las solicitudes y no tiene que lidiar con todos los detalles de TCP (syn, ack ...)
herm
13

Te sugiero que pruebes WiresharkInstalar Wireshark

Tenga en cuenta que Wireshark es bastante avanzado, por lo que puede llevar un poco de tiempo acostumbrarse. No lo he usado durante algunos años, pero aún así debería ser perfecto para lo que está buscando, si no demasiado lleno de características.

Puede encontrar información sobre Wireshark y cómo usarla en la página principal de Wireshark .

CruzBishop
fuente
1
Esto no funciona para un solo proceso. Obtendrá todo el tráfico en la interfaz y tendrá que filtrarlo por IP / protocolo, etc. wireshark - filtro por proceso / pid
gertvdijk
sí, pero se logra fácilmente con la interfaz wireshark.
Panther
2
He intentado Wirehark antes y es demasiado avanzado para mí, estoy buscando otra opción
megas
44
La otra opción es tcpdump. tcpdump es una herramienta de línea de comandos, hará el trabajo fácilmente, pero tiene una curva de aprendizaje más pronunciada. danielmiessler.com/study/tcpdump
Panther
1
@gertvdijk - como desee;) Siéntase libre de agregar a lo básico
Panther
5

También es posible con el comando, que proporciona una salida ordenada, incluso para SSL:

sudo tcpdump dst port 80
Gediminas
fuente