2017-03-09 45 views
4

我分析一個非常大的PCAP持有許多HTTP交易,其中一些感興趣的我。我使用的是帶有Lua腳本的tshark,主要用於查詢與過濾器匹配的所有數據包。如何獲取偵聽器的TCP流號?

tshark -X lua_script:filter.lua -r some.pcap -q 

到目前爲止好。但是,我正在專門查找Wireshark中名稱爲tcp.stream的數據包的TCP流號的值。任何人都可以說我需要對filter.lua進行哪些更改才能打印出來?

-- filter.lua 
do 
    local function init_listener() 
     local tap = Listener.new("http","http contains someKeyValue && tcp.port eq 1234") 
     function tap.reset() 
     end 
     function tap.packet(pinfo,tvb,ip) 
      print("Found my packet ... now what?") 
     end 
     function tap.draw() 
     end 
    end 
    init_listener() 
end 

什麼pinfotvbip是unforthcoming的文檔。

回答

9

您可以通過Field訪問TCP流編號。

local tcp_stream = Field.new("tcp.stream").value 

Field的值是當前數據包的值。您無需每次都創建一個新的Field。這使您可以使Field爲常數,並創建一個返回當前數據包的TCP流編號的函數。也可以調用Field值來獲得FieldInfo值,其中可能包含其他有用信息。

您希望filter.lua的樣子:

-- filter.lua 
do 
    local function init_listener() 
     local get_tcp_stream = Field.new("tcp.stream") 
     local tap = Listener.new("http","http contains someKeyValue && tcp.port eq 1234") 
     function tap.reset() 
     end 
     function tap.packet(pinfo,tvb,ip) 
      print(tostring(get_tcp_stream())) 
     end 
     function tap.draw() 
     end 
    end 
    init_listener() 
end 

https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Field.html#lua_class_Field