如何在LUA解析器中重新组装TCP数据包?

如何在LUA解析器中重新组装TCP数据包?,tcp,lua,wireshark-dissector,Tcp,Lua,Wireshark Dissector,我有一个在TCP协议之上运行的解析器,它的数据在多个TCP数据包上流动 我想在转换所有内容之前组装数据,因此我知道我需要tcp\u dissect\u pdus(),但我找不到相关文档或示例 有人能告诉我如何使用它或帮助我了解如何使用它吗?没有用于tcp\u dissect\u pdu的wslua API。但是你可以自己实现它 如果您想组装跨越两个或多个数据包的pdu,则非常简单: function slicer.dissector(tvb, pinfo, tree) ... l

我有一个在TCP协议之上运行的解析器,它的数据在多个TCP数据包上流动

我想在转换所有内容之前组装数据,因此我知道我需要
tcp\u dissect\u pdus()
,但我找不到相关文档或示例


有人能告诉我如何使用它或帮助我了解如何使用它吗?

没有用于tcp\u dissect\u pdu的wslua API。但是你可以自己实现它

如果您想组装跨越两个或多个数据包的pdu,则非常简单:

function slicer.dissector(tvb, pinfo, tree)
    ...
    local pdu_length = get_pdu_length(...)
    if pdu_length > tvb:len() then
        pinfo.desegment_len = pdu_length - tvb:len()
    else
        do_dissection(tvb, pifo, tree)
    end
    return
end
如果您不知道pdu的确切长度,可以执行以下操作:

        pinfo.desegment_len = DESEGMENT_ONE_MORE_SEGMENT

您应该阅读第2.7节。

根据文档,只有在缓冲区包含我放入pinfo.desegment_len的字节数后,才会调用我的解析器,但如果f.e.的消息大小为3890字节,则在每个数据包中调用解析器,而不仅仅是在它获得字节数时。你知道为什么吗?从Wireshark 1.99.2开始,有一个用于tcp_dissect_pdu的Lua绑定。对于那些想知道的人来说,1.99.2是一个很好的例子。不确定此功能何时在稳定版本中发布。