基于Libnet 的网络协议测试系统研究与实现

时间:2022-06-06 10:11:35

基于Libnet 的网络协议测试系统研究与实现

摘要:计算机网络协议测试主要包含测试集自动构造技术与测试执行系统的设计,该文介绍了网络协议测试的基本理论,网络协议测试系统的设计思路与实现方法,基于Libnet与WinPcap函数库实现一个网络协议测试系统,该系统包括测试集管理,测试例构造与测试结果管理等模块,可用于网络协议一致性测试与性能测试,最后对路由器提供的DHCP服务进行测试验证测试系统的有效性。

关键词:Libnet;协议测试;DHCP

中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2013)32-7218-03

计算机网络在各行业的广泛应用促使许多新的协议规范被制定,在协议规范被实现后投入应用前需要进行测试,全面的网络协议测试能够保证协议实现按照协议规范稳定可靠地运行。协议测试的研究涉及了协议描述、测试生成、测试集描述法、测试实现等多个环节,在这些方面,国内外研究人员经过多年努力达成了很多共识,例如:网络协议测试类型包括一致性测试,互操作性测试,性能测试和健壮性测试[1]。测试理论的形式化方法主要包括:SDL,LOTOS,Petri网,Estelle等[2-4]。该文研究的重点是测试实现部分,介绍基于Libnet与WinPcap函数库的协议测试系统的实现方法,并结合DHCP协议进行测试从而验证测试系统的有效性。

1 协议测试技术

网络协议测试属于计算机软件测试的一个分支,在测试领域中测试方法分为3种:白盒测试、黑盒测试和灰盒测试。白盒测试通过每条语句至少执行一次来全面检查整个程序代码,而黑盒测试只测试软件外部可以观察到的行为,不涉及程序的内部结构。白盒测试的测试能力非常强,但是过程过于复杂,对被测软件要求也很高。黑盒测试只关心被测软件的输入和输出,测试能力虽然弱了些,但是测试过程本身相对简单,对被测软件要求也无特殊要求。灰盒测试是将白盒测试和黑盒测试结合起来形成的一种测试方法,吸收了两种方法的优点。在通信测试中,协议测试因为协议实现的复杂性往往采用黑盒测试,它并不检查协议代码,而是按照协议标准,通过控制观察被测协议实现或系统的外部行为对其进行评价。

协议测试中用来描述特定协议或协议族测试的实体称为测试集,它由多个测试组构成,测试组对应于此协议族的一个标准协议规范,测试例对应于一个标准协议规范的某一项功能描述,完成一个测试例可能需要不同的测试过程,一个测试过程的完成需要进行初始化、发包、收包、比较以及处理结果等步骤,每一个动作称为一个测试步,它是测试集中最小的单位。在构造用于测试协议实现的输入数据包时采用了Libnet函数库,在捕获协议实现的反馈输出数据包时采用了WinPcap函数库,Libnet与WinPcap都是免费开源的函数库,它们封装了常用繁琐的网络开发过程函数,开放出简单统一的API接口功能函数,方便用户调用,使开发人员能够忽略网络底层细节的实现,从而专注于程序本身具体功能的设计与开发。Libnet与WinPcap都是基于C语言的函数库,具备低层网络数据包操控能力。

2 测试系统总体结构

测试系统包括测试集管理,测试例构造与测试结果管理3个功能模块,系统执行测试时的顺序与测试例构造模块中构造的测试步顺序一致。在对被测系统开始测试前需要针对协议规范设计测试例,所有测试例由测试集管理模块维护,最终的测试结果生成依赖测试例的执行结果。测试例由许多测试步组成,测试步包括两种执行逻辑:激励数据包发送和反馈数据包捕获。发送的激励数据包根据被测协议的类型与数据报文的类型设定首部各字段与报文数据,它的作用是激励被测系统内部产生状态变迁并发送反馈数据包。测试系统能够实时捕获所有数据包,根据filter条件过滤后选出特定报文并与测试步匹配,根据匹配结果系统决定测试步执行状态:丢弃报文继续阻塞,定时器清零继续下一测试步或者测试完成。在测试步执行过程中设置定时器,定时器时间的指定在测试例构造中完成。测试系统的总体结构如图1所示。

3 测试系统的设计与实现

本测试系统与被测实体部署在同一个交换网络中,被测实体是特定协议的一个实现,可以位于计算机或路由器等网络设备中,通过构造特定数据包并且捕获响应报文对协议外部行为进行分析测试。关键模块包括测试例构造,数据包构造与发送,数据包捕获与过滤。

3.1 测试例构造

系统实现时在测试例的构造模块中设置了行为选项来区分发送数据包与捕获数据包,测试步间隔时间选项用于控制相邻测试步执行的时机。对于发送数据包,根据协议的类型构造数据包设置页面,在此页面中设置首部字段与数据包内容,由于libnet提供自动计算校验和功能,此页面中首部校验和字段设置为0。对于捕获数据包,设置了匹配选项与传递选项,匹配选项用于判定数据包特征并触发下一测试步,传递选项用于决定是否需要将捕获数据定字段复制到下一测试步发送数据包特定字段中以及复制内容。对构造完的测试例启用测试将顺序执行其中的测试步,遇到捕获测试步将阻塞并启用超时定时器,每一个测试步执行过程都记录在日志文件中。

3.2 数据包构造与发送

系统实现使用Libnet函数库构造底层数据包,在依照协议字段长度与类型对测试例中设置的各字段进行合法性校验后调用libnet_init ()函数初始化函数库,此函数调用了WSAStartup()函数开启网络,同时分配一块内存区域建立libnet_t结构并返回此结构的描述符,这个描述符作为参数传递给构造数据包函数和发送数据包函数。测试步中设置的协议及各字段进行格式转换后传递给构造数据包函数,数据包构造函数根据协议族中的位置自顶向下建立数据报文头部,待发送的数据作为协议首部的有效载荷被加载,构造函数具备自动计算协议首部校验和字段的功能。测试报文发送函数根据协议类型调用socket函数将已构造好的缓冲区中的数据通过网卡发送到网络上,它的函数原型为:int libnet_write(libnet_t *l),此函数实现中调用了函数PacketSendPacket(),此函数在头文件packet32.h中声明,Packet32.lib与Packet32.dll是相应的静态链接库与动态链接库。WinPcap开发包中自带了Packet32,在工程项目中需要设置合适的系统路径。测试完成后使用libnet_destroy()函数来释放所占用的SOCKET连接、缓冲区等资源。

3.3 数据包捕获与过滤

捕获响应数据包使用WinPcap函数库,它的核心是NPF协议驱动,符合NDIS规范。在捕获数据包的线程里使用pcap_open()打开网络接口,pcap_next_ex()读取网卡接收的数据包,网卡在混杂模式会捕获大量的数据包,如果逐一比对测试步将消耗大量资源,在系统实现时调用pcap_setfilter()设置数据包过滤器,在调用pcap_setfilter前先使用pcap_compile()函数把高层的过滤规则解释成能被过滤引擎集成到数据包驱动中的低级字节码。

4 DHCP协议测试与结果分析

在对特定协议进行测试时需要根据协议的行为特征设计测试拓扑。某些协议的数据交换行为局限于测试平台与被测实体间,这种情况下只需将其部署在交换环境下即可,例如TCP协议的测试。而对于路由协议这样的协议而言,则需要设计更为复杂的拓扑,路由器的多个端口都需要部署测试平台进行协同测试。在协议安全性测试时借助交换机端口映射功能可以模拟攻击的拓扑结构。

为验证测试平台的有效性,选择DHCP协议进行测试。DHCP协议动态管理IP地址,工作在传输层之上,使用UDP提供的服务。其数据包封装格式如图2所示:

依照图2中DHCP数据包封装的结构,在构造DHCP数据包时调用函数依次为libnet_build_dhcpv4(),libnet_build_udp(),libnet_build_ipv4(),libnet_autobuild_ethernet(),Winpcap过滤DHCP数据包使用协议限定符“bootp”。测试采用的拓扑如图3所示:

测试拓扑中使用路由器作为DHCP服务器,在路由器上启用DHCP server服务,并且配置地址池、网关、地址租期等信息。

ip dhcp excluded-address 172.16.1.1 172.16.1.100

ip dhcp pool net172

network 172.16.1.0 255.255.255.0

default-router 172.16.1.254

dns-server 172.16.1.253

lease 30

在测试机上设置测试例Ts_sc,配置测试步:TS_DHCPDISCOVER,TS_DHCPOFFER,TS_DHCPREQUEST和TS_DHCPACK,其中TS_DHCPDISCOVER和TS_DHCPREQUEST是构造的激励数据报文,TS_DHCPOFFER与TS_DHCPACK为反馈数据报文。测试系统上启用测试执行Ts_sc测试例,在路由器上启用DHCP event调试,调试信息显示路由器DHCP服务状态发生变化,测试系统完成所有测试步后成功获得172.16.1.0网段IP,使用show ip dhcp server statistics查看DHCP服务器统计信息,与测试系统结果一致。

5 结束语

本文基于Libnet与WinPcap函数库设计并实现了一个网络协议测试系统。在用于协议一致性测试时可手工设置测试用例,灵活配置协议首部字段,能够对常见网络协议进行测试。在用于网络性能测试时可以设置数据包类型与数据包的发送数量,网络注入速度受数据包长度与网卡接口速度、交换机背板带宽等因素限制,可分布多台测试系统在网络中同时注入从而提高注入速度。经过多年的研究,在协议一致性测试集自动生成技术方面,研究人员提出了多种可行的方法,下一步的主要工作是整合测试集自动生成技术从而完成协议自动测试,同时进一步完善支持的协议类型,增强扩展性。

参考文献:

[1] 毕军,史美林.计算机网络协议测试及其发展[J].电信科学,1996(12):51-54.

[2] 章韵,杨庚,钱恩渊.基于SDL语言的通信协议系统设计方法[J].计算机工程与应用,2001(22):95-98.

[3] 潘红艳,于全.用于通信网络协议开发的形式化方法[J].计算机工程,2004(2):129-134.

[4] 罗军舟,沈俊,顾冠群.从Petri网到形式描述技术和协议工程[J].软件学报,2000(5):606-615.

[5] 刘浏,陈晓梅.基于测试套优化的DHCP协议一致性可扩展测试系统设计[J].信息网络安全,2012(8):206-209.

[6] 程方,王鹏.现代网络测试技术发展综述[J].重庆邮电大学学报:自然科学版,2008(6):57-60.

[7] 刘洪霞,赵保华.基于协议实现的网络安全测试[J].小型微型计算机系统,2007(4):619-621.

[8] 尹霞,王之梁,景传明,施新刚.一种基于TTCN-3的协议测试系统及其扩展研究[J].中国科学:E辑:信息科学,2008(10):1594-1613.

[9] 李尧,胡玲,郝文.基于状态的自动化无线协议安全测试平台设计[J].计算机应用与软件,2012(11):168-171.

[10] 王之梁,尹霞,李中杰.OSPF协议测试中网络拓扑建模及其算法研究[J].计算机工程与应用,2002(12):1-4.

[11] 李伟,魏仰苏,郑啸.网络协议测试仪的研制[J].测试技术学报,2004(3):244-248.

上一篇:客户关系管理在“大数据”时代下的数据挖掘研... 下一篇:基于WCF框架的设备点检系统