我有一个在TCP协议之上运行的解剖器,它的数据在多个TCP包上流动。
我想在转换所有内容之前组装数据,所以我知道我需要tcp_dissect_pdus()来处理它,但找不到文档或示例。
有谁能指点我或帮助我了解如何使用它?

最佳答案

没有用于tcp解剖的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节。

10-04 13:24