TCP重组问题

我是 LUA 新手,已成功编写了一个 dissector,并可以解析自定义协议通过 TCP 传输的数据(在我的应用程序中在两个模块之间通过网络发送)。但是,当 TCP 数据被拆分为多个包时,它就失效了。经过一些研究,发现在 lua 脚本中唯一的解决办法是使用 pkt.desegment_len 和 pkt.desegment_offset。但是使用修改后的代码后,当我在 wireshark 中打开一个给定的 pcap(插入此 dissector lua 脚本),我在详细信息(树)部分看到这些包的 pkt 信息是[TCP segment of a reassembled PDU],没有其他内容。我的协议包含几个标题字段,其中第 6 和第 7 个字节表示给定数据包的长度。下面是我的代码,请告诉我是否漏掉了什么,或者可以给我一个用于处理这个重组的 TCP 包的示例工作脚本。

function p_Kod_CALLP_MED.dissector (buf, pkt, root)

    local desiredPacketLen = buf(5,2):uint()

    -- if not enough data indicate how much more we need
    if desiredPacketLen > buf:len() then
      pkt.desegment_len = desiredPacketLen - buf:len()
      pkt.desegment_offset = 0
      return
    end

    -- have more than needed so set offset for next dissection
    if buf:len() >= desiredPacketLength then
      pkt.desegment_len = DESEGMENT_ONE_MORE_SEGMENT
      pkt.desegment_offset = desiredPacketLength
    end

-- 剩余的逻辑,例如添加到树等

点赞