- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
网络嗅探器中Lua嵌入脚本设计
网络嗅探器中Lua嵌入脚本设计
摘 要:网路嗅探器能够分析出一段网络中数据包使用的协议、IP、源端口等内容,经常用来检测一段网络的运行状况,排除网络故障。网路协议纷繁众多,采用Lua嵌入脚本来解析协议数据包,能够使程序灵活的扩展。本文简要介绍了嗅探器和Lua的概念;然后着重阐述了Lua脚本嵌入方案关键技术,对如何实现系统功能给予详细的描述;最后展示了Lua嵌入脚本实现的功能。通过测试表明,Lua嵌入脚本模块能够有效的使用新编的嵌入协议脚本来解析相应数据包。
关键词:网路嗅探器; Lua脚本;网络协议
中图分类号:TP393.09 文献标识码:A DOI:10.3969/j.issn.1003-6970.2013.07.019
本文著录格式:[1]苏建美,周仲礼,包俊强,等.网络嗅探器中Lua嵌入脚本的设计[J].软件,2013,34(7):55-58
0 引言
对于常用的网络协议如IP、TCP和UDP,我们可以在软件中直接编写代码来解析数据包的功能,但是对于其他的协议应用,我们不能直接写到软件中,一方面工作量很大,不现实,同时会使代码结构十分臃肿。一种很好的方法就是利用Lua嵌入脚本来解析这些额外的协议,为软件提供扩展功能。采用Lua嵌入脚本可以直接修改相应的脚本文件,从而嵌入到系统中。
Lua是一门嵌入脚本语言,最近逐渐被人们关注,并应用到各个领域中。当前有许多软件的扩展功能都是由Lua嵌入脚本实现的,比如魔兽世界、博德之门、愤怒的小鸟等等。Lua的使用赢得了人们的关注与好评。
1模块设计
1.1嗅探器
嗅探器是一种监视网络数据运行的软件设备。协议分析器既能用于合法网络管理也能用于窃取网络信息。网络运作和维护都可以采用协议分析器:如监视网络流量、分析数据包、监视网络资源利用、执行网络安全操作规则、鉴定分析网络数据以及诊断并修复网络问题等等。嗅探器是一种利用以太网特性把网络适配卡(NIC,一般为以太网卡)置为杂乱(promiscuous)模式状态的工具,一旦网卡设置为这种模式,它就能接收传输在网络上的每一个信息包,这也是进行网络数据包分析的基础。
1.2 Lua脚本语言
Lua 是一个十分小巧的脚本语言,是巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组,由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo所组成并于1993年开发。 其设计目的是为了嵌入应用程序中,为应用程序提供灵活的扩展和定制功能。Lua由标准C编写而成,几乎在所有操作系统和平台上都可以编译和运行。
1.3 Lua嵌入脚本模块设计
由于模块核心部分只有协议解析器-解析用户添加的协议设备。在软件启动的时候,协议解析器会以对象为参数来执行配置文件init.lua,用户可以在该配置文件中添加代码以实现添加新的协议到协议树中。当执行完init.lua配置文件之后,接下来由系统自动确定协议解析函数的调用流程,在解析过程中不断把解析结果传递给抓包模块,最后直到不能再解析为止。其总的流程图见图1 1。
在本模块中,以协议解析器类为核心来构建整个模块中各个类之间的关系,类关系图如图1 2所示。在程序启动之后,协议解析器的一个对象会先把系统API函数注册到lua_State对象中,通过调用LuaRegistrar完成,然后执行init.lua文件。如果在该文件的执行过程中添加协议,那么这个协议解析器将会用LuaDumper的一个对象来把解析函数编译成二进制,并保存在私有目录中。而且该协议将会被作为协议结点添加到协议树中,这颗协议树的根节点就是协议解析器管理的ProtocolNode对象。当协议网络数据包传递过来,ProtocolAnalyser对象会把数据包装成ProtocolPacket对象传递给Lua解析函数,解析的结果存放到ProtocolHeader的一个对象中。
在本模块中,需要将ProtocolAnalyser、ProtocolNode、ProtocolPacket和Protocolheader的对象传递为本模块的一些Lua API函数的参数。如第2章中的关键技术中提到的,需要进行userdata的参数类型检查,采用了通过为每一个类的对象定义元表的方法来识别类型。在这4个类中定义了一个static函数,该函数用来返回元表名:
static const char *GetMetaTableName();
这样做是为了在编程时保证为每一个对象创建元表与获取元表时做到编程的一致性。
2
文档评论(0)