【发布时间】:2018-07-06 23:02:31
【问题描述】:
首先解释一下我想要做什么。我正在编写一个 Java (1.7) 应用程序,它将尝试使用从生产者到目标消费者的 OpenWire 格式来“模糊”通过 ActiveMQ 发送的 XML 消息。目的是衡量目标如何响应发送给它的模糊消息。我在 Linux CentOS 6.6 上使用 ActiveMQ 版本 5.12.1。
有一个 XML 模式定义了将要发送的消息类型。我有单独的程序来生成这些消息的示例实例,并确定在发送的有线格式中找到信息的位置(在本例中为 OpenWire)。此信息将用于模糊测试过程,以了解要更改的数据的位置。
部分模糊测试过程涉及从网络中捕获网络格式消息,进行更改并将修改后的消息转发到目标。只要我只更改了内容而不更改长度,我就能够成功地修改数据并将其发送出去。如果修改导致长度发生变化,则与 ActiveMQ 服务器的连接关闭,程序失败。
研究表明,OpenWire 消息均以 4 字节整数开头,表示后面消息数据的长度。我更改了代码以调整该长度以反映对测试数据所做的更改。那没有用。经过进一步调查,我发现仅更改长度字段并不是正确的做法 - 但应该(或可以)做什么并不明显。
我有一个强烈的印象,最好的办法是使用 ActiveMQ API 重新编组修改后的消息数据并将其转发到目标。我不知道这是否对我有用。
我试图找到信息来帮助我确定所涉及的 OpenWire 消息的结构,以便我可以知道在修改消息时需要做什么。我开始查看 ActiveMQ javadocs 并找到了 openwire 包。也许我可以利用这些来实现我需要进行的更改,并让它们通过 ActiveMQ 成功转发并被目标接收。
是否有任何文档或示例代码提供有关如何正确使用此 API 来完成我需要的操作的说明或示例?根据我所描述的,这是可以使用 API 实现的吗?任何帮助,将不胜感激。谢谢。
【问题讨论】:
标签: activemq marshalling