我有一个基于UDP的协议,部分由Wireshark中的第三方dll解析。我现在想要创建一个自定义解剖器,以应用于剩余的字段“数据”。
是否可以这样做,我应该使用解剖器,解剖器或听众或它们的组合来实现这一目标吗?或者我是否必须将第三方解剖器重新编写为在剩余数据上调用我的解剖器的人?
答案 0 :(得分:3)
正如John Zwinck所提到的,你可能想要一个像链式解剖器这样的东西,你可以在Lua或C中相当直接地管理。为此,你当然希望将你的逻辑作为解剖器来实现。在Lua,有这样的事情:
do
--TODO set up your extra "data" field
local tcp_table = DissectorTable.get("tcp.port")
local third_party_dissector tcp_table:get_dissector(PROTO_PORT)
function your_protocol.dissector(tvb, pinfo, tree)
--call the third party dissector
third_party_dissector:call(tvb, pinfo, tree)
--TODO do what you need with the data
end
--take over the port your protocol runs over
tcp_table_add(PROTO_PORT, your_protocol)
end
保持API,但请记住,Wireshark中的Lua解剖器实际上只是用于原型设计;它们的效率低于等效的基于C的解剖器,并且API倾向于落后于C解剖API的几个版本。
答案 1 :(得分:1)
当我想做这样的事情时,我发现它令人惊讶地复杂和不愉快(相对于Lua解剖器开发而言)。这里提到了“链式解剖器”:http://wiki.wireshark.org/Lua/Dissectors。从我读到的(我从来没有让我的工作,但我没有尝试太多),在C中制作链式解剖器似乎比在Lua中更容易。不过,请尝试按照该页面上的示例进行操作,幸好有足够的评论可以说清楚。