2016-07-28 81 views
2

我想为某些协议的有效负载中进入的数据写一个Lua解剖器。每个数据包包含一些串行数据。数据需要作为CR分隔处理(0x0D/\r)数据包进行处理,但这些数据不一定与协议数据包对齐。Wireshark Lua解剖器重组 - 解剖器不与以前的Tvb的数据调用

我遇到了一个问题,如果我报告我没有足够的数据进行分析,解剖器函数没有从上次数据的剩余数据调用。

例如,假设我有以下协议报文:

1: 01 02 03 0D 
2: 11 12 13 
3: 21 22 23 24 0D 

然后我有两个dissectable序列:01 02 03 0D(第一分组),11 12 13 21 22 23 24 0D(分组2和分组3)。

我对这个策略是:

  • 的工作,虽然每个数据包,在寻找的\r
  • 偏移如果没有找到:
    • 设置desegment_offset = 0
    • 设置desegment_len = DESEGMENT_ONE_MORE_SEGMENT(因为我不知道剩下多少数据)
    • 返回nil并试试aga在接下来的分组
  • 如果发现在中间:
    • 设置desegment_offset到新行的偏移量,所以下一个数据包可以获得尾数据
    • 设置desegment_len = DESEGMENT_ONE_MORE_SEGMENT(因为我不知道有多少数据是左)
    • 不要返回
  • 如果发现在年底离开desegmentation单独PARAMS和进行 - 整体线条的DAT一行一个
  • 如果我们没有返回,从0到偏移缓冲器是数据的一整行 - 解析这个

实施例:

function myproto.dissector(tvbuf, pinfo, treeitem) 

    original_dissector:call(tvbuf, pinfo, treeitem) 

    local endOffset = 0 

    -- find out if we have any complete chunks 
    while endOffset < tvbuf:len() do 

     if tvbuf(endOffset, 1):uint() == 0x0D then 
      break 
     end 

     endOffset = endOffset + 1 
    end 

    -- didn't find a complete line in the payload 
    -- ask for more 
    if endOffset == tvbuf:len() then 
     pinfo.desegment_len = DESEGMENT_ONE_MORE_SEGMENT 
     pinfo.desegment_offset = 0 
     print(' Incomplete, ask for more') 
     return 
    end 

    -- have more than needed so set offset for next dissection 
    if tvbuf:len() - 1 > endOffset then 
     pinfo.desegment_len = DESEGMENT_ONE_MORE_SEGMENT 
     pinfo.desegment_offset = offset 
     print(' Too much, leave some for later') 
    end 

    print("Whole line dissector:", tvbuf:len()) 
end 

在上面的例子(有效负载长度4 ,3,5),当我实际上预期是4,3,8时,我得到的解剖器长度为4,3,8,最后一次调用包含以前数据包的剩余数据。

我打在第二个数据包“不完整,返回”分支,但第三个数据包永远不会改变。

这没有发生,我做错了什么?

附注:我知道上述方法不适用于每行有多个\r的情况,但我认为在这个问题中这样做更简单。

回答

2

通过设置desegment_offsetdesegment_length的重组功能取决于父协议。我猜你的串口协议是通过USB运行的,实际上USB协议并没有实现重新组装,因为USB通常是基于数据包/消息的。 (像TCP这样的协议可以实现重组,因为它逻辑上是一个数据流。)

Wireshark不会将重组API应用到Lua解析器(仍然适用于当前的开发版本,v2.3.0rc0),所以如果你是使用Lua,你不得不为你的解剖器创建一个你自己跟踪以前的数据的变量。

相关问题