网络嗅探器中Lua嵌入脚本的设计

来源 :软件 | 被引量 : 0次 | 上传用户:xie_e
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘 要:网路嗅探器能够分析出一段网络中数据包使用的协议、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 系统协议测试
  为了测试的需要,将所有协议交由本模块解析,初始化脚本init.lua代码见图2-1,其中参数...为系统自动传递过来ProtocolAnalyser的一个对象。函数AnalyserDoFile来传递ProtocolAnalyser对象作为参数执行协议脚本文件。
  我们添加IP、UDP、TCP和HTTP协议,全组织在一颗树中。其中Analyse为解析UDP数据包的解析函数,调用Header.SetField来设置字段的信息。参数...表示函数 AnalyserDoFile传递过来的ProtocolAnalyser对象。在编写完解析函数之后调用系统提供的API函数ProtocolAnalyser.GetScriptRootNode来获得协议树的根结点,调用ProtocolAnalyser.GetSonScript来获得UDP的底层协议IP协议,在确定key=17之后,调用ProtocolAnalyser.AddProtocol来添加UDP协议到IP协议的上层协议中。 (见图2 2)   在测试过程中,网络是联通的,能够解析大量的THHP协议,解析效果见图2 4、图2 5和图2 6。在网络层中,协议为IP协议,从解析结果,我们发现上层协议为TCP协议(见图2 4),于是在传输层中调用TCP协议的解析函数来解析传输层数据包,我们可以用简单的方式判别上层协议是否为HTTP:如果源端口或者目的端口之一为80,那么就认为是HTTP协议(见图2 3)。可以通过修改图2 1中的LuaScript/GetAppKey.lua脚本文件中的GetAppkey函数来改变这个简单的判别方式。从图2 5中我们发现目的端口为80,所以确定上层协议为HTTP协议。最后调用HTTP协议的解析函数来依次显示前10行字符串值,见图2-6。
  3 系统运行测试
  3.1 错误提示功能
  本系统中十分重要的是对用户编写的脚本中的错误信息进行报告。错误信息包括脚本的语法信息和运行时错误信息。语法错误在执行init.lua文件的时候就能够检查出来;而运行时的错误信息,有的可以在执行init.lua文件的时候检查出来,有的却要在调用数据包的解析函数才能报告出来。
  3.1.1语法错误的报告
  在Lua中,表示函数参数的括号要成对出现,否则会报错。我们把图2 1中init.lua代码中的第19行中的右括号删除,见图3-1,报告出来缺少右括号,见图3-3。在AnalyserDofile执行协议脚本文件时,如果有语法错误,这也能够报告出来。如图2 1的init.lua代码中的15行添加UDP协议时,我们也刻意把LuaScript/UDP.lua文件中的第2行function Analyse(data, result)的右括号去掉,见图3-2,系统启动时也将报告错误信息,见图3-4。
  3.1.2运行错误报告
  除语法错误的报告之外,运行的错误信息报告也十分重要。这一部分主要是指参数函数的参数不准确。初始化脚本文件init.lua中第10行的设置最大加载解析函数个数的函数ProtocolAnalyser.ResetLoadSize的第一个参数必须为ProtocolAnalyser对象,如果为nil,见图3-5,则在执行init.lua时该错误信息就能够报告出来,见图3-6。
  除此之外,还有一些运行时错误信息不能在执行init.lua时捕获到。比如在协议解析函数中的参数类型错误。比如函数Header.SetProtocolName的第1个参数必须为协议解析函數的第2个参数ProtocolHeader对象,而我们把图2 1 中UDP.lua的第3行的这个函数的参数改为解析函数的第1个参数ProtocolPacket对象,见图3-7,则在遇到UDP数据包并调用该解析函数的时候报告错误,见图3-8。
  4 总结
  本文主要研究设计了网络嗅探器中特定协议的Lua嵌入脚本的设计方案。实现了协议脚本的添加、解析网络数据包以及脚本错误报告等重要功能。
  本方案具备一些优点:脚本的编写规则简单,能够报告错误信息,协议的调用系统自动确定,减轻了用户的负担,体现了设计方案的友好特征。
  参考文献
  [1] 王晓东,夏靖波.通信网络程序设计[M].西安:西安电子科技大学出版社,2011.
  [2] 寇晓蕤,罗军勇,蔡延荣.网络协议分析[M].北京:机械工业出版社,2009.
  [3] ROBERTO I.Lua程序设计[M].周惟迪,译.第2版.北京:电子工业出版社,2008.
其他文献
摘要:智能电网是传统电网与信息技术融合的新型电网。随着信息技术的快速发展,信息安全作为信息技术的一个重要组成部分正在深刻地影响着人们的工作和生活。科技的发展给人们带来方便的同时,也暴露出了很多安全问题,特别是近年来,如信息泄漏、SQL注入漏洞和网络的渗透、黑客攻击等信息安全事件频发,给企业、社会和个人造成难以挽回的损失。电力行业作为一种能量供应,涉及国有资产的绝大部分信息、商业价值和国家机密。但是
期刊
摘要:随着云计算技术的蓬勃发展,OpenStack作为“云”家族中的新兴成员正在逐步成为该领域的核心技术。作为公有云和私有云的共同技术基础,OpenStack不但可以提供基础平台层的服务,而且能够实现统一的云管理平台自动化。然而,OpenStack作为一种新型的、动态的云服务,目前在安全性方面仍不完善。本文重点对OpenStack的对象存储进行安全性分析,发现OpenStack对象存储中身份认证、
期刊
摘 要:文章以四川交通职业技术学院为例,采用C#和SQL Server2008设计并实现了单独招生考场安排系统。对系统的初步使用表明,系统设计达到了预期目标,满足设计要求,极大的提高了单独招生考试考场安排的效率。  关键词:单独招生考试; C#; SQL Server2008  中图分类号:TP311 文献标识码:A DoI: 10.3969/j.issn.1003-6970.2012.06.
期刊
摘要:现代网络的快速发展,使网络上出现了大量的不同形式的信息内容,大量的信息内容通过不同的形式呈现。因此,需要用户自身的习惯偏好和知识环境在信息导航系统中发挥相应的主要作用。从用户个体认知语境作为出发点,通过导航实例对问题进行了深入研究,希望对相关工作人员的工作能够有所帮助。  关键词:用户;导航研究;认知语境  0 引言  信息时代飞速发展,同时也使得导航用户对知识的掌握程度得到了不断的提升。在
期刊
摘要:针对张家口市气象局声像预报解说词编辑工作的实际需求,结合编辑工作者与气象节目主持人的组成现状,设计了声像预报解说词用语库。主要目的一是方便编辑人员参考学习其它电视台的声像预报解说词;二是方便编辑者及主持人借鉴其他电视天气预报节目解说词的语言风格。程序设计中主要利用Visual Basic6.0、access数据库以及网络编程等核心技术,在实际工作中多次补充修整升级,基本实现了预定目标。  关
期刊
摘要:相比传统地基测控技术,中继卫星的应用具有显著的优势,其“天基”设计思想,从根本上解决了测控、通信的高覆盖率问题。在实际应用当中,为了实现天基测控在火箭、卫星、飞船等航天器上加装中继终端设备。航天远洋测量船接收航天器实时下传的天基设备状态数据,积累算法如何兼具有效性、容错性是测控应用中的关键环节。而现有算法在特殊情况下不能从火箭遥测中将天基设备状态数据提取出来,本文讨论了现有积累算法的处理流程
期刊
摘要:Visual Basic(简称VB)程序开发系统,利用可视化技术进行编程,使编程工作变得轻松与快捷,因此,其在国内外各个领域中应用非常广泛。利用VB和SQL等技术开发的学生信息管理系统,为学校实现“学生管理现代化”奠定了基础。  关键词:VB程序设计;SQL数据库管理系统;学生信息管理系统  中图分类号:TP311.52 文献标识码:A DOI:10.3969/j.issn.1003-697
期刊
摘要:人脸检测在许多应用中有着很重要的作用,其中人眼作为人脸中最重要的特征之一,没有单一的人眼检测算法甚至是一个系列技术可以解决所有精确定位人眼问题。因此对四种不同的人眼定位算法进行比较试验,分别是基于多角度的模版匹配法,霍夫变换法,自适应边缘提取法,对称变换法,比较各自的优缺点以及适应使用的环境,以期于在不同的图像条件和外部环境下达到识别的最优效果。  关键词:人眼定位;模版匹配;霍夫变换;边缘
期刊
摘 要:首先针对防空作战C3I系统功能性能指标的灵活测试需要,对防空作战C3I系统组成、主要功能以及主要指标测试项目与方法进行了深入研究,然后介绍了防空作战C3I系统仿真测试环境的组成、主要信息交互关系和运行工作流程,最后介绍了测试环境构建以及分布交互式互联测试中的通用装备仿真模型设计、分布式时间同步、空情作战态势生成、半实物系统互联的时空一致性等关键技术的设计实现。  关键词:防空作战C3I系统
期刊
摘 要:以长沙市望城区为例,探讨格网法修测地形的模式。  关键词:望城;格网法;地形;修测  中图分类号:P207 文献标识码:A DOI:10.3969/j.issn.1003-6970.2013.07.046  本文著录格式:[1]刘苏洲.格网法地形修测方法[J].软件,2013,34(7):132-133  0 引言  地形图在规划系统的主要用途为规划设计、用地蓝线的划定等。望城全域有两种比
期刊