【发布时间】:2010-09-02 05:21:55
【问题描述】:
我正在尝试获取数据包的所有协议字段的列表。 我尝试了 all_field_infos,但它返回了用户数据,我无法确定要用来读取它的元表。 wireshark 是否将协议树传递给水龙头? (我们接受 (tvb,pinfo,tree) 用于解剖器,所以我认为它可能) 是否有一些 Proto.fields 排序属性返回特定协议的所有字段?
【问题讨论】:
我正在尝试获取数据包的所有协议字段的列表。 我尝试了 all_field_infos,但它返回了用户数据,我无法确定要用来读取它的元表。 wireshark 是否将协议树传递给水龙头? (我们接受 (tvb,pinfo,tree) 用于解剖器,所以我认为它可能) 是否有一些 Proto.fields 排序属性返回特定协议的所有字段?
【问题讨论】:
我自己没有使用过 Wireshark,但是在他们的在线用户手册中四处寻找会产生this chapter,它似乎记录了数据包的方法和字段列表。没有允许userdata 支持pairs() 的元方法,所以文档真的是你得到的全部。
或者,您可以尝试在userdata 上调用getmetatable() 并列出其内容。当然,它可能会使用__index() 将真正的方法隐藏在其他地方......
我认为Lua-L mailing list 上也有一些关于 Wireshark 的讨论。它的档案可能会有所帮助。
作为一个低优先级的手段,Wireshark 是开源的,所以必须有可能找到实现 Lua 端接口的代码......
【讨论】:
userdata 是 Lua 保存任意数据块的方式,以及描述从 Lua 端可以用它做什么的元表。除了将其传回具有struct 定义可用的C 端的某些东西之外,您没有义务对其进行更多操作。