2009-11-10 25 views
6

¿Cómo puedo oler y analizar el tráfico de Java RMI? Solo hay una solución muy parcial en wireshark. Necesito saber exactamente qué métodos se invocaron y cuáles argumentos pasaron olfateando la conexión TCP.Java RMI: Sniffer needed

Respuesta

4

¿Necesita "olfatearlo", o puede implementar una fábrica de sockets personalizada en el cliente o el servidor?

En el pasado creé una fábrica de socket de servidor RMI personalizada que creaba un "tee" en la secuencia leída por el servicio RMI. Como el tiempo de ejecución de RMI leía una de las transmisiones normalmente, mi código también obtuvo una copia del JRMP para analizar. En mi caso, estaba registrando las llamadas remotas, incluidos sus parámetros en forma serializada, para poder "reproducirlas" más tarde para la prueba de carga. Simplemente habilitar las opciones de registro de RMI no fue suficiente para eso.

Un problema es que la documentación de JRMP es deficiente y, en algunos casos, inexacta. Otra es que una gran parte del código necesario no es parte de la API principal de Java. Fue complicado. Pensé que entendía RMI bien antes de comenzar, pero después de hacer este pequeño proyecto, me sorprendió cuánto más tuve que aprender.

Un enfoque similar podría aplicarse a los datos de aplicaciones capturados por Wireshark, pero nunca he escrito un analizador para Wireshark y no estoy seguro de lo complicado que es.

0

Ethereal podría ayudar, pero es bastante bajo nivel.

+1

That's wireshark. No ayuda demasiado. Solo analiza algunos encabezados – GabiMe

+1

Eso es nuevo para mí. Lo bueno es que en SO puedes aprender algo incluso al responder una pregunta. –

5

Puede establecer algunos java properties para que rmi sea más detallado.

Probablemente lo que necesita este ajuste:

sun.rmi.client.logCalls (1.4 y posteriores)

Si el valor de esta propiedad es cierto, el registrador sun.rmi.client.call se establecerá en el nivel Level.FINER. Las llamadas remotas se registran en el nivel Level.FINER, y las excepciones de las llamadas remotas se registran en el nivel Level.FINE.

0

No conozco una herramienta que pueda olfatear y descifrar el tráfico RMI del cable. Si nadie más lo hace, una solución menos óptima podría ser instrumentar sus stubs/esqueletos (probablemente generados automáticamente si está utilizando Java 5 o posterior) o partes de la infraestructura RMI con código para generar mensajes de registro.

Puede usar AOP o alguna herramienta de manipulación de código de bytes para lograr esto. He usado JavaAssist para tareas similares a las suyas con éxito. Es muy amigable para una herramienta de esta naturaleza.