如何在lua dissactor中将表数据作为参数传递给Protofield.string()函数?

时间:2016-05-19 06:37:53

标签: lua wireshark wireshark-dissector protofield

我在lua脚本中编写了一个协议的解析器。 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" 作为所有消息类型的过滤值。

我想根据不同的消息类型显示此过滤器值,例如&#34; abcd.mac_id = some_value&#34; 用于MAC ID,而不为每种消息类型创建单独的protofield。< / p>

是否可以在message_types表的帮助下完成此操作?

1 个答案:

答案 0 :(得分: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的消息类型,您将应用&#34; abcd.message_type eq 1&#34; 的Wireshark显示过滤器。如果这不是你想要的,那么请澄清你的问题。