如何创建适合在 Lua 中链接的 Wireshark DissectorTable?

How do I create a Wireshark DissectorTable suitable for chaining in Lua?

我正在尝试剖析封装在 UDP 数据包中的专有协议。该协议是多层的,在最低层有一个非常简单的报头。该报头有一个类型字段来指示更高层协议的格式。

将我的最低协议链接到 UDP 端口号很容易,有很多示例可供遵循。我不明白的是如何根据类型字段创建一个 DissectorTable,以便我可以链接更高级别的协议。

对于用于在树中显示它的低级协议的每个字段,我都有 ProtoField 对象。如何将 DissectorTable 及其 Dissectors 与类型字段中的值相关联?我什至需要在更高级别的协议添加自己之前填充 DissectorTable 吗?

您应该能够使用带有适当参数的 DissectorTable.new() 函数为您的协议创建一个新的 DissectorTable,您可以在 proto.dissector() 定义之外执行此操作,然后调用创建的 table 通过使用适当的参数调用 mydissectortable:try() 在你的 proto.dissector() 函数中。其他 Lua 解剖器(即您的更高级别的解剖器)将注册到此 table 中,就像他们使用 DissectorTable.get()dissectortable:add().