2009-11-10 4 views
6

Как я могу нюхать и анализировать трафик Java RMI? В wirehark есть только очень частичное решение. Мне нужно точно знать, какие методы вызывают и какие аргументы передают, обнюхивая TCP-соединение.Java RMI: Требуется Sniffer

ответ

4

Вам нужно «обнюхать» его или вы можете развернуть собственную фабрику сокетов на клиенте или на сервере?

В прошлом я создал обычную фабрику сокетов сервера RMI, которая создала «тройник» в потоке, считываемом службой RMI. Поскольку среда выполнения RMI обычно читает один из потоков, мой код также получил копию JRMP для синтаксического анализа. В моем случае я регистрировал удаленные вызовы, включая их параметры в сериализованной форме, чтобы я мог «переиграть» их позже для тестирования нагрузки. Для этого недостаточно включить параметры ведения журнала RMI.

Одна из проблем заключается в том, что документация JRMP является плохой, а в некоторых случаях и неточной. Другим является то, что много необходимого кода не является частью основного API Java. Это было сложно. Я думал, что понял RMI задолго до того, как начал, но после этого небольшого проекта я был удивлен, как много мне пришлось учиться.

Аналогичный подход может быть применен к данным приложений, захваченным Wireshark, но я никогда не писал анализатор для Wireshark, и я не уверен, насколько он сложный.

0

Ethereal может помочь, но это довольно низкий уровень.

+1

Это проводаhark. Это не слишком помогает. Он только разбирает несколько заголовков – GabiMe

+1

Это новости для меня. Самое приятное, что на SO вы можете чему-то научиться, даже отвечая на вопрос. –

5

Вы можете установить java properties, чтобы сделать rmi более подробным.

Возможно, вам нужен этот параметр:

sun.rmi.client.logCalls (1.4 и более поздних версий)

Если значение этого свойства является истинным, sun.rmi.client.call регистратор будет установлен на уровень Level.FINER. Удаленные вызовы регистрируются на уровне Level.FINER, а исключения из удаленных вызовов регистрируются на уровне Level.FINE.

0

Я не знаю инструмента, который может нюхать и расшифровывать трафик RMI с провода. Если никто другой не делает этого, менее оптимальным решением может стать инструмент для ваших заглушек/скелетов (возможно, сгенерированный автоматически, если вы используете Java 5 или новее) или части инфраструктуры RMI с кодом для вывода сообщений журнала.

Чтобы достичь этого, вы можете использовать AOP или некоторый инструмент манипулирования байтовым кодом. Я успешно использовал JavaAssist для выполнения подобных задач. Он очень дружелюбен к инструменту такого характера.