如何使用Lua在Wireshark中分解已分解的数据包中的字段?

我有一个基于 UDP 的协议,并且在 Wireshark 中部分由第三方 dll 进行解剖。现在我想创建一个自定义解剖器来应用于剩余的字段 “data” 上。

我是否可以这样做,我应该使用解剖器、后处理器、监听器或它们的组合来完成这个任务?或者我必须重新编写第三方解剖器,以调用我的解剖器来处理剩余数据?

原文链接 https://stackoverflow.com/questions/8138478

点赞
stackoverflow用户4323
stackoverflow用户4323

当我想要做这样的事情时,我发现它相对于一般的 Lua 解剖器开发来说非常复杂和不愉快。这里有一些关于“链式解剖器”的提及:http://wiki.wireshark.org/Lua/Dissectors。从我所读的(我从未让我的工作实现,但我也没有很努力地尝试),似乎用 C 制作链式解剖器比用 Lua 更容易。不过,试试跟随那页上的示例,它有足够的注释使它相当清晰。

2011-11-17 03:11:53
stackoverflow用户622215
stackoverflow用户622215

正如John Zwinck所提到的,你可能需要类似于链接分离器的东西,在Lua或C中可以很容易地进行管理。为此,你必须要将你的逻辑实现成分离器。在Lua中,可以这样做:

do
    -- TODO 设置你的附加 "data" 字段
    local tcp_table = DissectorTable.get("tcp.port")
    local third_party_dissector tcp_table:get_dissector(PROTO_PORT)

    function your_protocol.dissector(tvb, pinfo, tree)
         -- 调用第三方分离器
         third_party_dissector:call(tvb, pinfo, tree)
         -- TODO 对数据做你需要的事情
    end

    -- 接管你的协议的端口
    tcp_table_add(PROTO_PORT, your_protocol)
end

请保持 API 在手边,但也要记住,在Wireshark中的Lua分离器只是用于原型开发;它们比等效的基于C的分离器效率低,并且API往往落后于C分离API的几个版本。

2011-11-17 20:10:00