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

我编写了一个用lua脚本实现的协议解析器。这个解析器工作得很好。但我想知道如何更新解析器文件。

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"**,而无需为每个消息类型创建一个单独的protofield。

这可以通过message_types表来实现吗?

点赞
用户2755698
用户2755698

我不确定我理解你的问题,但是通常对于一个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-11 20:38:55