我有一个建立在 UDP 上的协议,它被 Wireshark 中的第三方 dll 部分剖析。我现在想创建一个自定义解析器以应用于剩余字段“数据”。
是否可以这样做,我应该使用解剖器、后解剖器或侦听器或它们的组合来完成此操作吗?或者我是否必须将第三方解析器重新写入一个调用我的解析器的剩余数据?
我有一个建立在 UDP 上的协议,它被 Wireshark 中的第三方 dll 部分剖析。我现在想创建一个自定义解析器以应用于剩余字段“数据”。
是否可以这样做,我应该使用解剖器、后解剖器或侦听器或它们的组合来完成此操作吗?或者我是否必须将第三方解析器重新写入一个调用我的解析器的剩余数据?
正如 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 的几个版本。
当我想做这样的事情时,我发现它非常复杂且令人不快(相对于 Lua 解析器的一般开发)。这里提到了“链式解剖器”:http ://wiki.wireshark.org/Lua/Dissectors 。从我读到的(我从来没有让我的工作,但我没有太努力),在 C 中制作链式解析器似乎比在 Lua 中更容易。不过,请尝试按照该页面上的示例进行操作,幸好有足够的评论使其非常清楚。