
我们从协议对象开始,命名为 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扩展的例子。欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)