编写wireshark插件解析自定义协议数据包

标签:wireshark插件   自定义协议格式    2309人阅读 评论(0)
分类:

wireshark支持大量RFC标准协议,将每类协议解析的非常详细,功能很强大,

但用户自定义的协议,wireshark就无能为力了,只能显示一堆二进制,

导致分析问题,DEBUG时很麻烦,还得自己每个字节,每个Bit的算,


t1->t2回传数据的DDP协议为例,

 

DDP协议头部字段的C语言定义如下:

struct ddp_hdr {

         unsigned int magic;

#if __BYTE_ORDER == __LITTLE_ENDIAN

         unsigned char stream:1;

         unsigned char reliable:1;

         unsigned char chunk:1;

         unsigned char keepalive:1;

         unsigned char data_type:3; 

         unsigned char reserved2:1;

#elif __BYTE_ORDER == __BIG_ENDIAN

         unsigned char reserved2:1;

         unsigned char data_type:3;

         unsigned char keepalive:1;

         unsigned char chunk:1;

         unsigned char reliable:1;

         unsigned char stream:1;

#else

# error "Please fix <bits/endian.h>"

#endif

};


OK,编写wireshark插件第一步:

wireshark官方文档很详细,详见: https://www.wireshark.org/docs/wsdg_html

仔细阅读肯定能写出一个插件来。


但回想我们第一次写C语言时,没人会先看C99规范吧,那会打击绝大部分人的学习兴趣,而是先写个”hello, world”

不管会不会写C代码,先看运行效果再说,

我也先给出一个wireshark-plug版的hello-world:

 

先打开下面这个pcap包,看一下默认情况下,wireshark解析DDP是什么样:

ddp.60000_packet.pcap


因为是私有协议,默认情况下, wireshark肯定解析不出来,显示一堆二进制:

no_plug.jpg

然后,将下面这个脚本文件mesa_lab_ddp_example.lua,存储于本机wireshark的安装目录/plugins/2.2.1下;

(可能实际版本有差别,不一定是2.2.1)


再用wireshark打开看看:

ddp_plug.jpg

这样DEBUG起来方便多了吧!

 

Lua脚本主要步骤和语句我做了注释,我想大家即便看不懂某行具体代码,照猫画虎、照葫芦画瓢,也能写出其他自定义协议的插件了。

这篇简短小文只负责带领大家尽快的从01,更复杂的功能还是要自己去看官方文档深入学习吧。


查看评论

暂无评论

发表评论
  • 评论内容:
      
首页
团队介绍
发展历史
组织结构
MESA大事记
新闻中心
通知
组内动态
科研成果
专利
论文
项目
获奖
软著
人才培养
MESA毕业生
MESA在读生
MESA员工
招贤纳士
走进MESA
学长分享
招聘通知
招生宣传
知识库
文章
地址:北京市朝阳区华严北里甲22号楼五层 | 邮编:100029
邮箱:nelist@iie.ac.cn
京ICP备15019404号-1