wireshark怎么添加协议

wireshark怎么添加协议,第1张

如果熟悉lua编程,使用lua扩展就可以了。可以参考wireshark网站上的例子。我们很多私有的协议也是用lua写解析器的。当然,如果你想从头编译wireshark也可以,不过我觉得还是lua扩展相对容易写一些,并且wireshark目录下的chm帮助文件有lua编写的API参考。

wireshark的协议不支持之前,报文几乎难以分析,举例如下

我们从协议对象开始,命名为 pulsar_protocol 。构造函数两个参数分别为名称和描述。协议需要一个 fields 表和 dissecotr 函数。我们现在还没有任何 field ,所以 fields 表为空。对于每一个报文, dissctor 函数都会被调用一次。

dissector 函数有三个入参, buffer , pinfo ,和 tree 。 buffer 包含了网络包的内容,是一个 Tvb 对象。 pinfo 包含了wireshark中展示packet的列信息,是一个 Pinfo 对象。 tree 是wireshark报文详情显示的内容,是 TreeItem 对象。

在 dissector 函数中,我们检查buffer的长度,如果长度为0,则立即返回

pinfo 对象包含着列信息,我们可以将 pinfo 的protocol设置为pulsar,显示在wireshark的界面中。接下来在packet的结构中创建一个子树,最后,我们把协议绑定到6650端口上。让我们加载这个 lua 插件

结果符合预期

让我们添加一个长度字段,pulsar协议中,长度字段即就是前4个字节,定义字段

pulsar.message_length 可以用在过滤器字段中。 messageLength 是子树中的 label 。第三个字段决定了这个值会被如何展示

最后,我们把长度值加入到Wireshark的tree中

pulsar的协议是大端序,我们使用 add 函数。如果协议是小端序,我们就可以使用 addle 函数。

我们添加的 message_length 字段已经可以显示在Wireshark中了

https://www.wireshark.org/docs/wsdg_html_chunked/lua_module_Proto.html#lua_fn_ProtoField_char_abbr___name____base____valuestring____mask____desc__

https://ask.wireshark.org/question/15787/how-to-decode-protobuf-by-wireshark/

使用lua扩展,有个init.lua是控制lua扩展的,随机文档中有一章专门写了wireshark的lua扩展,以后也许支持python扩展。当然,c扩展也可以,不过难度大很多,需要编译。wireshark网站上也有关于写lua扩展的支持。网上也有很多别人写好的lua扩展的例子。


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/bake/11617548.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存