【问题标题】:lua dissector for custom protocol用于自定义协议的 lua 解析器
【发布时间】:2015-08-10 16:18:06
【问题描述】:

我已经为我们使用的自定义协议编写了​​几个 Lua Dissectors,它们运行良好。为了发现丢失数据包的问题,​​我需要根据旧数据包检查自定义协议序列号。 设备 A 到设备 B 的 IP 源地址和目标地址始终相同。 在这个数据包中,我们有一个自定义 ID。 每个 ID 都有一个序列号,因此设备 B 可以确定数据包是否丢失。序列号递增 256 并在达到 65k 时翻转 我尝试过使用全局字典,但是当您向上和向下滚动跟踪时,解码器会重新运行并且值会发生变化。 下面几行显示了信息的存储位置。

ID = buffer(0,6):bitfield(12,12)
SeqNum = buffer(0,6):bitfield(32,16)

理想情况下,如果前一个序列号超过 256,我想在每个解码帧中列出,并生成一个表格,列出所有这些坏帧。

源IP;目标IP; ID;序列

1 10.12.1.2; 10.12.1.3; 10个; 0

2 10.12.1.2; 10.12.1.3; 11; 0

3 10.12.1.2; 10.12.1.3; 12; 0

4 10.12.1.2; 10.12.1.3; 11; 255

5 10.12.1.2; 10.12.1.3; 12; 255

6 10.12.1.2; 10.12.1.3; 10个; 511 缺少 seq 255 的数据包

我现在已经设法让解析器通过使用全局数组来检查当前数据包与以前的数据包,我在其中存储有关每个帧的特定信息。在当前被剖析的数据包中,我重新检查最近的数据包,然后回到起点寻找合适的数据包。

 dict[pinfo.number] = {frame = pinfo.number, dID = ID, dSEQNUM = SeqNum} 
local frameCount = 0 
local frameFound = false 
while frameFound == false do 
    if pinfo.number > frameCount then
      frameCount = frameCount + 1
      if dict[(pinfo.number - frameCount)] ~= nil then
          if dict[(pinfo.number - frameCount)].dID == dict[pinfo.number].dID then
              seq_difference = (dict[(pinfo.number)].dSEQNUM - dict[(pinfo.number - frameCount)].dSEQNUM)
              if seq_difference > 256 then
                  pinfo.cols.info = string.format('ID-%d SeqNum-%d  missing packet(s) %d   last frame %d ', ID,SeqNum, seq_difference, dict[(pinfo.number - frameCount)].frame)
              end
              frameFound = true
           end
       end
     else
        frameFound = true
     end
 end

【问题讨论】:

    标签: lua wireshark wireshark-dissector


    【解决方案1】:

    我不确定我是否看到要回答的问题?如果您问“我怎样才能避免不得不处理多次调用的解析器并搞砸先前的​​值解码” - 答案是使用 pinfo.visited 布尔值。第一次解析给定数据包时将是false,之后是true,无论用户如何点击 - 直到重新加载文件或加载新文件。

    要处理重新加载/新建文件的情况,您可以通过定义 function myproto.init() 函数来挂钩到您的原型的 init() 函数调用,并在其中清除整个数组表。

    此外,您可能想在ask.wireshark.org 上搜索相关问题/答案,因为该网站更常用于解决wireshark Lua API 问题。例如this question/answer 与您的案例相似且相关。

    【讨论】:

    • 问题的第二部分添加了我用来让解剖器正常工作的解决方案。
    • 我现在想使用 TAP 向表格提供客户协议统计信息,
    猜你喜欢
    • 2017-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-10
    相关资源
    最近更新 更多