首页 > 解决方案 > Wireshark 自定义 LUA 解析器:格式显示

问题描述

假设我想要一个名为 ABC 的字段,它将是 2 个无符号字节:0 到 65535 但是,表示的实际值是 -5.0 到 60.0,位与实际值之间的线性转换。

我有一些定义消息及其元素的 XML:名称、位置、位值(最小值和最大值)、实际值(最小值和最大值)、它在数据库中的存储方式(XML 从数据库中输出)、转换类型。

我正在编写一些从 XML 到 LUA 格式的转换工具。我应该如何编写解析器,以便看到 -5 到 60 之间的值?

谢谢

标签: wireshark-dissector

解决方案


您需要确保它不是 uint16 而是浮动的。

local abc_field = ProtoField.uint16("yourproto.abc", "ABC Value")

至:

local abc_field = ProtoField.float("yourproto.abc", "ABC Value")

当您添加 ABC 字段时:

subtree:add(ABC, buf(0, 2))

进行计算:

subtree:add(ABC, buf(0, 2):bitfield(0, 16) * (65/65536) - 5)

推荐阅读