用lua语言编写Wireshark插件解析自定义协议.doc

用lua语言编写Wireshark插件解析自定义协议.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
用lua语言编写Wireshark插件解析自定义协议 ( 2012-01) Wireshark默认支持大量网络协议,我们可以在Wireshark主菜单“Internals Support Protocols (slow!)”查看当前支持的所有协议。Wireshark 1.6.2版本已支持1170种协议,包括我们熟悉的Diameter、GTP、FTP、SCTP等协议。 上述都是业界的通用协议,然而对我们产品的自定义协议,Wireshark是不得而知的,抓包后只能看到一串二进制码流,导致开发调试或者测试分析效率较低。 有什么办法让Wireshark也能解析自定义协议呢?本文介绍的用lua编写Wireshark解析器插件就是一种常用方法。Wireshark软件内嵌一个lua语言执行引擎并提供一系列lua函数接口,从而满足用户各种各样的协议解析目的。 下面以一个简单的自定义协议为例,演示如何编写Wireshark解析插件。不过本文只是业余学习的笔记和简单实践,不能覆盖“lua编写Wireshark解析器插件”的所有知识点(更全面的介绍请参考Wireshark软件自带手册第11章“Lua Support in Wireshark”,只是开源软件的手册似乎总是不够详尽。)。 1. 配置Wireshark执行lua脚本 通过Wireshark主菜单“Help About Wireshark”可以查看当前安装版本已经内嵌Lua 5.1执行引擎。默认安装情况下Wireshark会在安装路径下生成一个init.lua,它是Wireshark启动过程执行的第一个lua脚本。一般来说,我们可以在此文件中添加dofile函数调用其他lua脚本,实现各种扩展目的。例如,默认安装后init.lua文件末尾有一句: dofile(DATA_DIR..console.lua) 此语句执行了安装目录下的console.lua脚本,该脚本也是Wireshark自带的,用途是在主菜单Tool下创建一个子菜单Lua。我们甚至可以在上述语句之前添加注释--符来取消它。 dofile是lua基础库提供的一个函数,用途如下: 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, dofile does not run in protected mode). 我们下来编写的解析器也是以.lua脚本形式保存,然后在init.lua文件末尾中添加一个dofile调用即可。 2. 需要解析的自定义协议 假设我们需要基于UDP协议实现一种根据员工ID查询员工姓名的信息服务,客户端向服务器端的12345端口发送QueryRequest,服务器返回应答QueryResponse,数据结构如下: 消息名称 消息结构 QueryRequest Uint16 usMsgType; //消息类型, 查询请求=0 Uint32 uiEmployeeID; //员工工号 QueryResponse Uint16 usMsgType; //消息类型,查询应答=1 Uint32 uiEmployeeID; //员工工号 Uint16 usQueryResult; //查询操作结果,成功=0, 失败=1 Char[32] szEmployeeName; //查询结果,如果成功,填写员工姓名; 否则填写失败原因 假设员工数据库信息有两条记录如下: 员工ID 员工姓名 1 Liu Dehua 2 Zhang Xueyou 将上述协议实现之后,服务器端部署在, 客户端在2。以下就是启动1次查询过程的Wireshark抓包结果: 上图是QueryRequest消息,uEmployeeID指定为1。 上图是QueryResponse消息,返回uEmployeeID=1的查询结果。 从上面2个图可见,Wireshark已经自动地把以太网帧、IP报文、UDP数据报都解析出来,唯独我们自定义协议的消息无法解析,以Data来显示。把上述抓包结果保存到一个pcap文件中。下面我们逐步实现对该协议的解析。 3. Wireshark的lua函

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档