我正在分析一个非常大的PCAP,它持有许多HTTP事务,其中一些让我感兴趣。我正在使用带有Lua脚本的tshark
来查询与过滤器匹配的所有数据包。
tshark -X lua_script:filter.lua -r some.pcap -q
到目前为止一切顺利。但是,我正在寻找一个数据包的TCP流号的值,它在Wireshark中名为tcp.stream
。任何人都可以说我需要对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
有关pinfo
,tvb
和ip
的文档尚无法解决。
答案 0 :(得分:8)
您可以通过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