无法在 Wireshark/Lua 插件中将字符串显示为 XML 树

我有一个 数据包流 包括经过加密的 XML 负载。 我正在开发一个 Wireshark/Lua 插件,在解密后显示 XML 数据。这是我现在拥有的:

decoded_buffer = ProtoField.string("tacserver.decoded_buffer", "XML")
.....
function tacserver_protocol.dissector(buffer, pinfo, tree)
     .....
     local decoded_string = decode(buffer(10))
     subtree:add(decoded_buffer, decoded_string)

     local xml_dis = Dissector.get("xml")
     local byte_array = ByteArray.new(decoded_string)
     local tvb = ByteArray.tvb(byte_array, "XMLdata");
     xml_dis:call(tvb, pinfo, tree)

我调用 decode 函数来解密 XML 负载并将结果存储在 decoded_string 中。在 Wireshark 中,当将数据显示为字符串时,输出是正确的。

XML [truncated]: <?xml version="1.0" encoding="UTF-8" ?>\n<body>\n<TacServerInfo...
eXtensible Markup Language

但是,调用 XML 解析器不会生成任何输出。我需要做什么才能将解码后的数据转储为 XML 树?谢谢!

以下是版本信息:

版本 2.6.10(作为 2.6.10-1~ubuntu18.04.0 打包的 Git v2.6.10)
版权所有 1998-2019 Gerald Combs <gerald@wireshark.org> 和贡献者。 许可证 GPLv2 +:GNU GPL 版本 2 或更高版本 <http://www.gnu.org/licenses/old-licenses/gpl-2.0.html> 这是免费软件;有关复制条件,请参阅源代码。 没有保修;甚至没有适合特定用途的适用性。
使用 Qt 5.9.5(64 位编译),使用 libpcap,使用 POSIX 能力(Linux),使用 libnl 3,GLib 2.56.4,zlib 1.2.11,SMI 0.4.8,c-ares 1.14.0,Lua 5.2.4,GnuTLS 3.5.18,Gcrypt 1.8.1,MIT Kerberos,MaxMind DB 解析器,nghttp2 1.30.0,LZ4,Snappy,libxml2 2.9.4,QtMultimedia,SBC,SpanDSP,没有 bcg729。
 Linux 5.3.0-61-generic 上运行,使用 Intel(R) Core(TM) i5-7440HQ CPU @ 2.80GHz(带 SSE4.2),具有 3864 MB 物理内存,具有本地化 en_US.UTF-8,具有 libpcap 版本 1.8.1,具有 GnuTLS 3.5.18,具有 Gcrypt 1.8.1,具有 zlib 1.2.11,支持二进制插件(加载了 14 个)。 使用 GCC 7.4.0 构建。
Wireshark 是根据 GNU 通用公共许可证发布的开放源代码软件。
有关更多信息,请参阅 man 页面和 http://www.wireshark.org。
点赞
用户2755698
用户2755698

我认为这只是一个简单的问题,就是将对 Dissector.get("xml") 的调用移到 tacserver_protocol.dissector() 函数之外,也就是:

local xml_dis = Dissector.get("xml")

function tacserver_protocol.dissector(buffer, pinfo, tree)
    .....
    local decoded_string = decode(buffer(10))
    subtree:add(decoded_buffer, decoded_string)

    local byte_array = ByteArray.new(decoded_string)
    local tvb = ByteArray.tvb(byte_array, "XMLdata");
    xml_dis:call(tvb, pinfo, tree)
    .....
end
2020-07-08 22:25:52
用户7218062
用户7218062

我找到了问题所在。解码后的字符串是一个原始字符串,所以我需要将代码改为:

byte_array = ByteArray.new(decoded_string, true)
2020-07-09 18:04:49