前言
protobuf是google团队开发的用于高效存储和读取结构化数据的工具。相比于json和xml,protobuf会把数据压缩得更小,大约是json格式的1/10,xml格式的1/20。正因如此,protobuf编码后的数据,不能像json、xml那样直观地呈现数据。本文将介绍如何解析利用wireshark自定义插件,解析protobuf数据包。
概要
wireshark的插件可以使用c或是lua脚本进行开发,考虑到灵活性,推荐使用lua脚本。
我理解wireshark插件的执行过程就是用插件去解析每一个数据包,解析过程中如果出错,则继续由其他插件尝试解析;如果解析正确,则表示由该协议解析并显示结果。
值得注意的是,当插件只处理了部分数据时,未处理部分的数据切片要继续交由其他插件尝试解析。例如一个基于TCP协议的RTSP数据包依次由Ethernet、Internet、TCP、RTSP插件解析,Ethernet协议解析该数据包的0 - 13byte,Internet协议解析该数据包的14 - 33byte,TCP协议解析了34 - 65byte,RTSP协议解析剩余的274 byte,至此数据包解析完成。
1.环境准备
1.1.安装wireshark
#环境是ubuntu 64位,windows开发笔者比较弱鸡
$sudo apt-get update
$sudo apt-get install wireshark
1.2 安装lua-protobuf支持库
wireshark中lua版本是5.2,所以需要先安装lua5.2
$sudo apt-get update
$sudo apt=get install lua5.2
克隆lua-protobuf项目并编译
$git clone https://github.com/starwing/lua-protobuf.git
$gcc -O2 -fPIC -I/usr/include/lua5.2 -c pb.c -o pb.o
$gcc -shared -o pb.so -L/usr/local/lib pb.o
2.创建wireshark插件
我们通过一个例子来说明如何创建一个插件:
数据端口:7200
数据格式: