0

我在 lua 脚本中为协议编写了​​一个 dissactor。Dissactor 工作正常。但我想知道 dissactor 文件中的一个更新。

p_abcd = Proto("abcd", "ABCD")

我为不同类型的消息创建了一个表。下面是表格——

 local message_types = {
 [1] = "MAC ID", 
 [2] = "AP MODEL NAME",
 [3] = "AP SERIAL NUMBER",
 [4] = "CAUSE",
 [5] = "AP STATE",
 [6] = "AP SOFTWARE VERSION",
 [7] = "AP_IP_ADDRESS"
}

下面是一个 protofield,我为此协议创建了它并将其注册为一个字段。

local attribute_type = ProtoField.string("abcd.message_type", "Attribute Type")  
p_abcd.fields = {attribute_type}
tree_attribute:add(attribute_type, data(index, 2), message_types[data(index, 2):int()])

如果我将在wireshark 中对任何消息字段应用过滤器,它将显示“abcd.message_type = some_valve”作为所有消息类型的过滤器值。

我想根据不同的消息类型显示此过滤器值,例如 MAC ID 的“abcd.mac_id = some_value”,而不为每种消息类型创建单独的原型字段。

是否可以在 message_types 表的帮助下做到这一点?

4

1 回答 1

0

我不确定我是否理解你的问题,但通常对于一个 2 字节的字段,你会有这样的东西:

local attribute type = ProtoField.uint16("abcd.message_type", "Attribute Type", base.DEC, message_types, 0x0000, "Optional Message type description")
p_abcd.fields = {attribute_type}

tree_attribute:add(attribute_type, data(index, 2))

(有关更多信息,请参阅ProtoField。)

然后,如果您正在寻找等于 MAC ID 的消息类型,您将应用 Wireshark 显示过滤器"abcd.message_type eq 1"。如果这不是您想要的,请澄清您的问题。

于 2016-08-11T20:38:55.600 回答