4

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

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

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

4

1 回答 1

7

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 节。

于 2012-10-30T16:43:05.493 回答