Как мне переназначить измененное сообщение с ActiveMQ (OpenWire)? - PullRequest
0 голосов
/ 05 июля 2018

Сначала небольшое объяснение того, что я пытаюсь сделать. Я пишу приложение на Java (1.7), которое будет пытаться «запихивать» XML-сообщения, отправленные через ActiveMQ, используя формат OpenWire от производителя к целевому потребителю. Цель состоит в том, чтобы оценить, как цель реагирует на нечеткие сообщения, отправленные ей. Я использую ActiveMQ версии 5.12.1 в Linux CentOS 6.6.

Существует схема XML, которая определяет типы сообщений, которые будут отправлены. У меня есть отдельные программы, которые генерируют примеры экземпляров этих сообщений и идентифицируют, где информация находится в отправленном формате (в данном случае OpenWire). Эта информация будет использоваться в процессе фаззинга для определения местоположения данных, которые нужно изменить.

Часть процесса фаззинга включает захват сообщения проводного формата с провода, внесение изменений и пересылку измененного сообщения на цель. Мне удалось успешно изменить данные и отправить их вперед, если я изменил только содержимое, а не длину. Если изменение приводит к изменению длины, подключение к серверу ActiveMQ закрывается и происходит сбой программы.

Исследования показывают, что все сообщения OpenWire начинаются с 4-байтового целого числа, представляющего длину следующих данных сообщения. Я изменил свой код, чтобы скорректировать эту длину, чтобы отразить изменение, внесенное в данные испытаний. Это не сработало. После еще одного исследования я обнаружил, что просто изменить поле длины было неправильно, но неясно, что нужно (или можно) сделать.

У меня сложилось сильное впечатление, что лучшее, что можно сделать, - это использовать API ActiveMQ, чтобы перенастроить измененные данные сообщения и перенаправить их на цель. Я понятия не имею, доступна ли мне эта опция.

Я попытался найти информацию, которая поможет мне определить структуру сообщений OpenWire, чтобы я мог знать, что мне нужно делать при изменении сообщения. Я начал смотреть на javadocs ActiveMQ и нашел пакеты openwire. Возможно, я смогу использовать их для внесения необходимых изменений и их успешной пересылки через ActiveMQ и получения цели.

Существует ли какая-либо документация или пример кода, в котором содержатся инструкции или примеры того, как правильно использовать этот API для выполнения того, что мне нужно? Исходя из того, что я описал, возможно ли это с помощью API? Любая помощь будет оценена. Спасибо.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Похоже, вы хотите отправить данные XML через ActiveMQ.

  1. Вам не нужно беспокоиться об Openwire. Клиентские библиотеки обрабатывают это для вас. Это протокол, который библиотека ActiveMQ JMS использует для связи с ActiveMQ, в то время как вашей программе нужно беспокоиться только о том, как общаться с JMS.

  2. Решите, какой API использовать для связи с ActiveMQ .. если это Java, используйте JMS API и отправьте объект TextMessage, где тело установлено в строковое представление данных Xml. Если это C #, посмотрите на библиотеку ActiveMQ NMS. Если PHP / Python / Perl или другой язык сценариев, найдите библиотеки STOMP и отправьте текстовые сообщения с данными Xml в качестве тела.

0 голосов
/ 06 июля 2018

Посмотрите на http://camel.apache.org Нет необходимости интерпретировать формат проводника напрямую. Может даже работать на сервере amq.

...