用lua语言编写Wireshark插件解析汇报自定义协议详情

上传人:m**** 文档编号:495170385 上传时间:2023-03-02 格式:DOCX 页数:9 大小:347.13KB
返回 下载 相关 举报
用lua语言编写Wireshark插件解析汇报自定义协议详情_第1页
第1页 / 共9页
用lua语言编写Wireshark插件解析汇报自定义协议详情_第2页
第2页 / 共9页
用lua语言编写Wireshark插件解析汇报自定义协议详情_第3页
第3页 / 共9页
用lua语言编写Wireshark插件解析汇报自定义协议详情_第4页
第4页 / 共9页
用lua语言编写Wireshark插件解析汇报自定义协议详情_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《用lua语言编写Wireshark插件解析汇报自定义协议详情》由会员分享,可在线阅读,更多相关《用lua语言编写Wireshark插件解析汇报自定义协议详情(9页珍藏版)》请在金锄头文库上搜索。

1、用 lua 语言编写 Wireshark 插件解析自定义协议(y00111592 2012-01)Wireshark默认支持大量网络协议,我们可以在 Wireshark主菜单“Internals Support Protocols (slow!)”查看当前支持的所有协议。Wireshark 1.6.2版本已支持1170种协议,包括 我们熟悉的Diameter、GTP、FTP、SCTP等协议。上述都是业界的通用协议,然而对我们产品的自定义协议,Wireshark是不得而知的,抓 包后只能看到一串二进制码流,导致开发调试或者测试分析效率较低。有什么办法让Wireshark也能解析自定义协议呢?本文

2、介绍的用lua编写Wireshark解析 器插件就是一种常用方法。Wireshark软件内嵌一个lua语言执行引擎并提供一系列lua函数 接口,从而满足用户各种各样的协议解析目的。下面以一个简单的自定义协议为例,演示如何编写 Wireshark 解析插件。不过本文只是 业余学习的笔记和简单实践,不能覆盖“ua编写Wireshark解析器插件”的所有知识点更 全面的介绍请参考Wireshark软件自带手册第11章Lua Support in Wireshark,只是开源软件的手册似 乎总是不够详尽。)。1. 配置Wireshark执行lua脚本通过Wireshark主菜单“Help About

3、Wireshark可以查看当前安装版本已经内嵌Lua 5.1 执行引擎。默认安装情况下Wireshark会在安装路径下生成一个init.lua,它是Wireshark启 动过程执行的第一个lua脚本。一般来说,我们可以在此文件中添加dofile函数调用其他lua 脚本,实现各种扩展目的。例如,默认安装后init.lua文件末尾有一句: dofile(DATA_DIR.console.lua)此语句执行了安装目录下的console.lua脚本,该脚本也是Wireshark自带的,用途是在主菜 单Tool下创建一个子菜单Lua。我们甚至可以在上述语句之前添加注释-符来取消它。dofile 是 lu

4、a 基础库提供的一个函数,用途如下:dofile (filename)Opens the named file and executes its contents as a Lua chunk. When called without arguments, dofile executes the contents of the standard input (stdin). Returns all values returned by the chunk. In case of errors, dofile propagates the error to its caller (that is

5、, dofile does not run in protected mode).我们下来编写的解析器也是以.lua脚本形式保存,然后在init.lua文件末尾中添加一个 dofile 调用即可。2. 需要解析的自定义协议假设我们需要基于UDP协议实现一种根据员工ID查询员工姓名的信息服务,客户端向 服务器端的12345端口发送QueryRequest,服务器返回应答QueryResponse,数据结构如下:消息名称消息结构QueryRequestUint16 usMsgType;消息类型,查询请求=0Uint32 uiEmployeeID; 员工工号QueryResponseUint16 u

6、sMsgType;消息类型,查询应答=1Uint32 uiEmployeeID; 员工工号Uint16 usQueryResult; 查询操作结果,成功=0,失败=1Char32 szEmployeeName; 查询结果,如果成功,填写员工姓名;否则填写失败原因假设员工数据库信息有两条记录如下:员工ID员工姓名1Liu Dehua2Zhang Xueyou将上述协议实现之后,服务器端部署在192.168.56.1, 客户端在192.168.56.22。以下就是 启动1次查询过程的Wireshark抓包结果: 丄011 I田 Frame 3: 48 bytes on wire (384 bits

7、), 48 bytes captured (384 bits)B Data (S bytes) Ethernet II, 5rc: O8:OO:27:f8:35:22 (08:00:27汁8汩5:22), Dst: 08:00:27:00:14:3c (08:00:27:00:14:3c 田 internet Protocol Version 4, Src: 192.168.56.22 (192.168.56.22), Dst: 192.168.56.1 (192.168.56.1) 田 UsEr Datagram Protocol, Src Port: 234 56 (234 56), Ds

8、t Port: 1234 5 (1234 5)Data: 000001000000Length: 6上图是 QueryRequest 消息,uEmployeelD 指定为 1。S Frame 4: 82 bytes on wire (656 bits), 82 bytes captured (656 bits)S Ethernet II, Src: 08:00:27:00:14:3c (08:00:27:00:14:3c), Dst: 08:00:27汁E汩5:22 (08:00:27汁8汩5:22) 0 internet Protocol Version 4, Src: 192.168.56

9、.1 (192.168.56.1), Dst: 192.168.56.22 (192.168.56.22) S User Datagram Protocol, Src Port: 1234 5 (1234 5), Dst Port: 234 56 (23456)0 Data (40 bytes)Dara: 01000100000000004C69752044 6568756100000000000000.Length: 40上图是QueryResponse消息,返回uEmployeeID=1的查询结果。从上面2个图可见,Wireshark已经自动地把以太网帧、IP报文、UDP数据报都解析出 来

10、,唯独我们自定义协议的消息无法解析,以Data来显示。把上述抓包结果保存到一个pcap 文件中。下面我们逐步实现对该协议的解析。3. Wireshark 的 lua 函数接口3.1. Proto 协议在Wireshark中Proto主要用途是声明一个新的协议,进而可以给它编写解析器函数。311Protonew:声明一个新的协议例如:my_proto = Proto (myProto,My Protocol for Query Employee,My Self-defined Protocol)3.1.2. proto.dissector :解析器函数例如:function my_proto.d

11、issector(buffer,pinfo,tree)pinfo.cols.protocol:set(myProto) pinfo.cols.info:set(This is a message of myProto) enddissector函数的第一个参数buffer对应需要解析的二进制码流,第二个参数pinfo对应Packet List窗口的信息,tree是Packet Details窗口的树结构,如下图所示:Q naAe_service. pcap Tireshark 1.6.2 (SW Rev 38931/t runk-1. 6) XFile Edit View Go Capture

12、 Analyze Statistics T elephony Tools Internals 旦 el 口it會會綴綴j口后邀韶目丨家隊町乔曇i|s|a|i Q殴已丨皤团關離 0000001000208 o o o 4 o c o -9o4 o .1 4 3 o 9 . o c _d7- 3 b2 3 rj o 1 o 2 .8 o 8 o o 3oollcle8 _d .f Q - -y2 8 o2 _d o-.丄二|.丄 Q |J| .U . L丄丄U G .U 二匚U U rUi! u u r Lefj u r l 31326041105.780929192.168.56.22192.1

13、68.56.1n-j nfn)p48Sou re“rt:241326041105.802222192.168.56.1192.168.56.2282Sourceport:151326041108 900716192.168.56.22192.168.56.1)p48sou re“rt:261326041108 901966192.168.56.1192168 56.22U DP82Sourceport:11 lj l-rame 1: 4a byTes nn wire (384 birsj,48 byTes Cdprured (384田 Ethernet ii, Er匸:cadmusco_f8:

14、35:22 (08:00:27汁8:弓5:22), Dsr : cadrnusco.00:14:3c (08:00:27:00:1 internet Protocol Version 4, src: 192.168.56.22 (192.168.56.22), Dst:.92.168.56.1 (192.168.56 User Datagram Protocol, Src Port: 234 56 (23456), Dst Port: italk (12340S Dara (6 bytes)t reebufferWireshark已经为我们提供了处理这三个参数的接口了。有关buffer的lua API,可以参 考官方手册 “11.12. Functions for handling packet data”,如下图所示:Functions for handling packe

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号