Wireshark lua Dissector 在所有数据包之间共享公共变量

网络工程 线鲨
2022-02-04 21:41:16

我刚开始使用wireshark中的lua插件。我想知道是否有可能创建一个全局对象,该对象可以由一个数据包中的解析器调用并由另一个数据包调用的解析器使用。

1个回答

当然,lua 有全局变量,可以从不同数据包的不同解析器访问。

以下是基于https://wiki.wireshark.org/Lua/Dissectors中的简单解析器,并添加了一个变量计数器,它是文件的本地变量和解析器的全局变量:

-- test with tshark -r CAP1 -n -X lua_script:filename.lua -V

local counter = 0;

triviala_proto = Proto("triviala", "Trivial Protocol A")
function triviala_proto.dissector(buffer, pinfo, tree)
    pinfo.cols.protocol = "TRIVIALA"
    local subtree = tree:add(triviala_proto, buffer(), "Trivial")
    subtree:add(buffer(0, 2), "++" .. counter .. "/" .. buffer(0, 2):uint())
    counter = counter + 1;
end
udp_table = DissectorTable.get("udp.port")
udp_table:add(7777, triviala_proto)

全局可用于同一文件中的其他解析器(易于测试:只需在端口 8888 上创建匹配的“trivialb_proto”)。