如何使用Lua在Wireshark中解析已解析包中的字段?
我有一个基于UDP的协议,该协议部分由Wireshark中的第三方dll解析。现在,我想创建一个自定义解析器,应用于剩余字段“data”如何使用Lua在Wireshark中解析已解析包中的字段?,lua,wireshark,wireshark-dissector,Lua,Wireshark,Wireshark Dissector,我有一个基于UDP的协议,该协议部分由Wireshark中的第三方dll解析。现在,我想创建一个自定义解析器,应用于剩余字段“data” 有可能这样做吗?我应该使用剖析器、后剖析器、侦听器或它们的组合来完成这项工作吗?或者我必须将第三方解析器重新写入对剩余数据调用我的解析器的解析器吗 当我想做这样的事情时,我发现它令人惊讶地复杂和不愉快(相对于Lua解剖器的开发)。这里提到了“链式剖析器”:。从我读到的(我从来没有让我的工作,但我没有太努力),它似乎更容易使链式解剖C比在卢阿。尽管如此,请尝试按
有可能这样做吗?我应该使用剖析器、后剖析器、侦听器或它们的组合来完成这项工作吗?或者我必须将第三方解析器重新写入对剩余数据调用我的解析器的解析器吗 当我想做这样的事情时,我发现它令人惊讶地复杂和不愉快(相对于Lua解剖器的开发)。这里提到了“链式剖析器”:。从我读到的(我从来没有让我的工作,但我没有太努力),它似乎更容易使链式解剖C比在卢阿。尽管如此,请尝试按照该页面上的示例进行操作,谢天谢地,该页面上有足够多的注释使其非常清晰。当我想做类似的事情时,我发现它异常复杂且令人不快(相对于Lua解剖器的总体开发)。这里提到了“链式剖析器”:。从我读到的(我从来没有让我的工作,但我没有太努力),它似乎更容易使链式解剖C比在卢阿。尽管如此,请尝试按照该页面上的示例进行操作,谢天谢地,该页面上有足够的注释使其非常清晰。正如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
保持现有的,但也要记住,Wireshark中的Lua解剖器实际上只是用于原型制作;它们的效率低于等效的基于C的剖析器,并且API往往落后于C剖析API的几个版本。正如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
保持现有的,但也要记住,Wireshark中的Lua解剖器实际上只是用于原型制作;它们的效率低于同等的基于C的剖析器,而且API往往落后于C剖析API的几个版本。你可能想看看Wireshark问答网站你可能想看看Wireshark问答网站是的,我也有同样的感觉。让我想用Haskell编写一个数据包分析器…:)谢谢,错过了那个。不幸的是,我无法让它工作。可能是我被迫使用了一个非常旧的Wireshark版本(0.99.7)。是的,我也有同样的感觉。让我想用Haskell编写一个数据包分析器…:)谢谢,错过了那个。不幸的是,我无法让它工作。可能是我被迫使用一个非常旧的Wireshark版本(0.99.7)。