2011-01-31 12 views
6

Tengo un código java nuevo (usando las bibliotecas http de Apache commons) y viejo (estrictamente usando Java 1.4 API) y estoy tratando de reescribir el código anterior usando las bibliotecas más recientes de apache commons. Sin embargo, no está funcionando y estoy luchando por descubrir por qué. Las solicitudes se envían, pero mi código más nuevo expira en el servidor receptor al que no tengo acceso. Como el código anterior funciona, debo haber deshecho la solicitud http. Sería muy útil utilizar algún tipo de rastreador de tráfico HTTP para examinar exactamente lo que se está enviando para que pueda ver las diferencias que existen.¿La mejor manera de analizar el tráfico http enviado por mi código java?

He descargado algunos sniffers http de la web (this one y that one) pero ninguno captura los datos http enviados por mi código Java (pero funcionan cuando envío solicitudes aleatorias desde un navegador). ¿Alguna idea sobre cómo puedo tener acceso a estos datos?

Respuesta

8

Use wireshark.

Es genial, gratuito, de código abierto, multiplataforma, y ​​puede resaltar diferentes capas de red, y no se está ejecutando desde un sitio web dudoso que se parece al spam SEO.

Snort es otra muy buena, pero está más orientada a la detección de intrusiones y respuestas automáticas a eso. Aún así, tiene un gran sniffer.

+2

Perfecto gracias. Se siente un poco como tener una ferretería entera a mi alcance cuando todo lo que necesito es un destornillador, pero ¡hey, trabajo hecho! –

+0

Sugerencia informativa amistosa, tendrá que esforzarse un poco para conseguir que wireshark capture el tráfico [localhost] (http://wiki.wireshark.org/CaptureSetup/Loopback) y es bastante difícil capturar el tráfico de Windows localhost. – hooknc

0

Si intenta olfatear su loopback (127.0.0.1) - eso es un poco complicado y debe instalar un controlador especial para eso.
Sugiero que envíe una solicitud al servidor "falso" y que lo detecte.
puede oler con "WireShark" o "burpSuite" (si puede configurar su programa que pasa por el servidor proxy).
gl.

3

Normalmente encuentro que el rastreo de paquetes es un nivel demasiado bajo para la resolución de problemas de HTTP. Pruebe con un proxy inverso; personalmente me gusta Charles ya que funciona igual en Windows, Mac OS X y Linux; Fiddler es popular en Windows.

+0

Gracias por la sugerencia, pero (y es posible que esté a punto de entrar en mi cabeza) mi programa java no interactúa con la web, simplemente se comunica con un servidor local a través de http y Fiddler no captura mis solicitudes . –

+0

Charles funciona muy bien para este tipo de situaciones. Para configurar Commons HttpClient para usar un servidor proxy local: 'client.getHostConfiguration(). SetProxy (" localhost ", 8888)'. –

0

puede especificar SOCKS Proxy. normalmente Java usa SocksSocketImpl, es decir, admite automáticamente proxies SOCKS.

Cualquier otro sniffer también lo hará

Cuestiones relacionadas