2017-03-09 50 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