构造Wireshark解剖器,使过滤更容易

时间:2019-03-15 19:04:35

标签: wireshark wireshark-dissector

我正在写我的第一个Wireshark解剖器。我正在使用this as an example在Lua中编写它。我的通信协议在响应头中嵌入了命令ID,然后是根据命令ID有所不同的定义明确的有效负载。到目前为止,我一直在构造ProtoFields,以使字段的缩写名称(过滤器中使用的字符串)遵循这样的命名约定

proto_name.command_name.field_name

某些命令具有类似的字段,如以下示例所示

myproto.cmd_update.updateId
myproto.cmd_update_ack.updateId

其中,根据协议,必须使用具有相同update有效负载的update_ack命令来确认updateId命令。理想情况下,我想创建一个Wireshark过滤器,以便可以看到与updateId字段有关的所有数据包。我尝试创建

这样的过滤器
myproto.*.updateId == 0x1234

,但这似乎是无效的wireshark过滤器语法。我不想像这样使过滤器显式显示

myproto.cmd_update.updateId == 0x1234 or myproto.cmd_update_ack.updateId == 0x1234

因为在我的实际协议中,还有更多具有相似/相关字段的命令。我可以使用过滤器语法吗?还是应该以不同的方式构造解剖器的ProtoField缩写?

2 个答案:

答案 0 :(得分:0)

过滤器行似乎没有通配符语法,因此我在解剖器本身中解决了这个问题。除了myproto.*.updateId字段之外,我还添加了另一个名为myproto.updateId的字段(请注意中间缺少通配符)。它的值设置为与完整的字段名相同,这意味着我现在只有一个要搜索的字段名。我还将此字段设置为hidden = true以将其隐藏。

有点hack,但是给了我我想要的东西。

答案 1 :(得分:0)

您可以尝试使用Wireshark display filter macro