如何使用 ActiveMQ (OpenWire) 重新编组修改后的消息?
How do I remarshal a modified message with ActiveMQ (OpenWire)?
首先解释一下我正在尝试做的事情。我正在编写一个 Java (1.7) 应用程序,它将尝试 "fuzz" XML 通过 ActiveMQ 发送的消息,使用从生产者到目标消费者的 OpenWire 格式。目的是衡量目标如何响应发送给它的模糊消息。我在 Linux CentOS 6.6.
上使用 ActiveMQ 版本 5.12.1
有一个 XML 架构,它定义了将要发送的消息类型。我有单独的程序生成这些消息的示例实例,并标识在发送的有线格式(在本例中为 OpenWire)中找到信息的位置。此信息将用于模糊测试过程,以了解要更改的数据的位置。
模糊测试过程的一部分涉及离线捕获有线格式消息、进行更改并将修改后的消息转发到目标。我已经能够成功修改数据并将其转发,只要我只更改了内容而不是长度。如果修改导致长度发生变化,与ActiveMQ服务器的连接将关闭,程序将失败。
研究表明OpenWire报文都是以一个4字节的整数开头,代表后面报文数据的长度。我更改了代码以调整该长度以反映对测试数据所做的更改。那没有用。经过更多调查,我发现仅仅更改长度字段并不是正确的做法 - 但应该(或可以)做什么并不明显。
我有一个强烈的印象,最好的办法是使用 ActiveMQ API 重新编组修改后的消息数据并将其转发到目标。我不知道这是否是我可用的选项。
我试图找到信息来帮助我确定所涉及的OpenWire消息的结构,以便我知道在修改消息时我需要做什么。我开始查看 ActiveMQ javadoc 并找到了 openwire 包。也许我可以利用这些来影响我需要进行的更改,并通过 ActiveMQ 成功转发并由目标接收。
是否有任何文档或示例代码提供有关如何正确使用此 API 来完成我需要的操作的说明或示例?根据我的描述,这是否可以使用 API 来实现?任何帮助,将不胜感激。谢谢。
看看http://camel.apache.org
无需直接解释有线格式。
甚至可以 运行 在 amq server.
听起来您想通过 ActiveMQ 发送 Xml 数据。
您无需担心 Openwire。客户端库为您处理。这是 ActiveMQ JMS 库用来与 ActiveMQ 对话的协议,而您的程序只需要担心如何与 JMS 对话。
决定使用什么 API 与 ActiveMQ 对话。如果是 Java,使用 JMS API 并发送一个 TextMessage 对象设置为 Xml 数据的字符串表示形式。如果是C#,看看ActiveMQ的NMS库。如果 PHP/Python/Perl 或其他脚本语言,请查找 STOMP 库并发送以 Xml 数据作为正文的文本消息。
首先解释一下我正在尝试做的事情。我正在编写一个 Java (1.7) 应用程序,它将尝试 "fuzz" XML 通过 ActiveMQ 发送的消息,使用从生产者到目标消费者的 OpenWire 格式。目的是衡量目标如何响应发送给它的模糊消息。我在 Linux CentOS 6.6.
上使用 ActiveMQ 版本 5.12.1有一个 XML 架构,它定义了将要发送的消息类型。我有单独的程序生成这些消息的示例实例,并标识在发送的有线格式(在本例中为 OpenWire)中找到信息的位置。此信息将用于模糊测试过程,以了解要更改的数据的位置。
模糊测试过程的一部分涉及离线捕获有线格式消息、进行更改并将修改后的消息转发到目标。我已经能够成功修改数据并将其转发,只要我只更改了内容而不是长度。如果修改导致长度发生变化,与ActiveMQ服务器的连接将关闭,程序将失败。
研究表明OpenWire报文都是以一个4字节的整数开头,代表后面报文数据的长度。我更改了代码以调整该长度以反映对测试数据所做的更改。那没有用。经过更多调查,我发现仅仅更改长度字段并不是正确的做法 - 但应该(或可以)做什么并不明显。
我有一个强烈的印象,最好的办法是使用 ActiveMQ API 重新编组修改后的消息数据并将其转发到目标。我不知道这是否是我可用的选项。
我试图找到信息来帮助我确定所涉及的OpenWire消息的结构,以便我知道在修改消息时我需要做什么。我开始查看 ActiveMQ javadoc 并找到了 openwire 包。也许我可以利用这些来影响我需要进行的更改,并通过 ActiveMQ 成功转发并由目标接收。
是否有任何文档或示例代码提供有关如何正确使用此 API 来完成我需要的操作的说明或示例?根据我的描述,这是否可以使用 API 来实现?任何帮助,将不胜感激。谢谢。
看看http://camel.apache.org 无需直接解释有线格式。 甚至可以 运行 在 amq server.
听起来您想通过 ActiveMQ 发送 Xml 数据。
您无需担心 Openwire。客户端库为您处理。这是 ActiveMQ JMS 库用来与 ActiveMQ 对话的协议,而您的程序只需要担心如何与 JMS 对话。
决定使用什么 API 与 ActiveMQ 对话。如果是 Java,使用 JMS API 并发送一个 TextMessage 对象设置为 Xml 数据的字符串表示形式。如果是C#,看看ActiveMQ的NMS库。如果 PHP/Python/Perl 或其他脚本语言,请查找 STOMP 库并发送以 Xml 数据作为正文的文本消息。