【问题标题】:how do I reassemble TCP packet in LUA dissector?如何在 LUA 解析器中重新组装 TCP 数据包?
【发布时间】:2012-10-19 17:44:17
【问题描述】:

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

我想在转换所有内容之前组装数据,所以我知道我需要tcp_dissect_pdus(),但我找不到它的文档或示例。

谁能指导我使用它或帮助我了解如何使用它?

【问题讨论】:

    标签: tcp lua wireshark-dissector


    【解决方案1】:

    tcp_dissect_pdus 没有 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
    

    您应该阅读README.developer 第 2.7 节。

    【讨论】:

    • 根据文档,只有在缓冲区包含我放入 pinfo.desegment_len 的字节数之后,我的解析器才会被调用,但如果 f.e.我有一条 3890 字节的消息,在每个数据包中都会调用解析器,而不仅仅是在它获取字节数时。你知道为什么会这样吗?
    • 从 Wireshark 1.99.2 开始,有一个用于 tcp_dissect_pdus 的 Lua 绑定。 wireshark.org/docs/wsdg_html_chunked/…
    • 对于那些想知道的人,1.99.2 是development release。不确定此功能何时进入稳定版本。
    猜你喜欢
    • 2013-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-23
    • 2012-12-21
    • 2015-02-02
    • 2011-07-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多