2016-07-28 82 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,你不得不爲你的解剖器創建一個你自己跟蹤以前的數據的變量。

相關問題