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

我有一个分离器,它在 TCP 协议上运行,并且有多个 TCP 包中流动的数据。

在我进行全部转换之前,我希望将数据组装起来,因此我理解我需要 tcp_dissect_pdus(),但我找不到它的文档或示例。

有人可以引导我或帮我理解如何使用它吗?

点赞
用户238077
用户238077

没有针对 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-30 16:43:05