2009-02-26 26 views
5

Estoy utilizando sockets TCP para comunicar datos entre un servidor y un programa cliente usando un número de puerto específico en la misma computadora (localhost).Java TCP Socket Sniffing

Necesito un software que pueda capturar los datos que se envían/​​reciben a través de ese socket?

(o)

Cuál es la forma más simple de sniffing de paquetes desde un puerto especificado en Java?

Respuesta

7

Sugiero usar Wireshark. Es fácil de usar y se ejecuta en muchas plataformas.

http://www.wireshark.org/

+0

Lamentablemente, no funcionará cuando el cliente y el servidor estén en la misma máquina. –

+1

Lo hará. Simplemente seleccione la interfaz loopback para capturar. –

+1

http://wiki.wireshark.org/CaptureSetup/Loopback (sección 'Alternativas') - una alternativa es agregar una ruta a su máquina local pasando por la puerta de enlace de la red – mjn

1

La forma más fácil es reemplazar el InputStream/OutputStream de un enchufe en uno de los programas con una aplicación proxy, que, o bien imprime/logs o "tes" a la original y una impresión/secuencia de registro .

Pero hay muchos rastreadores por ahí si realmente quieres ensuciarte.

1

Si no te molesta ensuciarte con la línea de comando, puedes probar netcat. Le permitirá escuchar en un puerto y volcar el resultado en un archivo si lo desea.
También puede hacerlo enviar datos falsos y registrar la respuesta.

A menudo lo uso como un proxy HTTP pretendido (y configuro Firefox para usarlo) para descubrir lo que se envía a través del cable.

4

Si tiene alguna codificación (y no solo ejecuta el wireshark/tcpdump), tiene pocas opciones. (?) Si desea atenerse a Java, entonces la única opción para utilizar los conectores directos se realiza a través de JNI y hay pocas bibliotecas que pueden ayudar, por ejemplo:

  • jNetPcap - envoltura alrededor de las bibliotecas libpcap/WinPcap nativos, exponer la totalidad de sus funciones y estructuras
  • RockSaw - API para el uso de los conectores directos
0

puede utilizar tcpdump que le brinda una variedad de opciones. Guarde la captura en un archivo .pcap con la opción -w y cuando haya terminado, abra ese archivo con wireshark. La ventaja de esta forma es que puede capturar una alta tasa de paquetes por segundo sin afectar el rendimiento general de su PC (incluso si es de gama baja).

1

Tcpdump también se puede utilizar directamente, si el volumen de tráfico no es alto, obviando la necesidad de usar wireshark. Sólo algo así como

tcpdump -ni lo0 port 1234 

debería ser todo lo que necesita (lo0 es la interfaz de bucle de retorno en todos los sistemas Unix/Linux, también cambiar el número de puerto, por supuesto).

1

ejecutar su programa de este modo:

java -Djavax.net.debug=all helloworld.java

El interruptor está totalmente documentado en los Oracle JSSE page

Pros:

  • mucho más simple que otras soluciones sugeridas (no requiere software externo)
  • También se puede descifrar/volcar conectividad TLS/SSL ns :)

Contras:

  • esto sólo funcionará si está utilizando clases de java.net.* por ejemplo, OutputStream o InputStream Esto no funcionará si está utilizando sockets sin formato. Esto está documentado en el enlace.
  • Cree que esto solo puede funcionar en Oracle JDK.
Cuestiones relacionadas