王春霞,张 莉
(福建师范大学闽南科技学院,福建泉州362332)
计算机网络技术的发展使得计算机网络应用日益广泛和深入,人们的工作、学习、生活都离不开网络.尽管计算机网络给人们带来了方便,但受到技术和社会等各种因素的影响,计算机网络还存在很多的安全缺陷.攻击者可以利用缺陷进行攻击和入侵,带来巨大的危害.网络嗅探器可以时刻监测网络的状态和网络流动信息,可以有效防止大部分的攻击和入侵,对保障网络安全起到重要的作用.
Winpcap是win32平台下强大的、有较好扩展性的底层网络分析体系结构.Winpcap由虚拟设备驱动程序文件—NPF、动态连接库(Packet.dll)和独立于系统的函数库(Wpcap.dll)组成[1].NPF 运行在操作系统内核中,能直接访问网络接口驱动,能够将数据包不做任何改动传送给用户.Packet.dll不需编译便可以运行于不同版本的windows系统上,为win32提供了一个公共接口,同时还可以用来获得适配器名称等[2].Wpcap.dll库提供了更强大、更抽象的高层函数.
网络嗅探器也叫网络监听,是能够捕获网络报文的软件,是网络中的“窃听器”.与电话和无线电监听类似,计算机网络使用的数字信号在线路上进行传输时也可以进行监听.由于以太网等多种网络是基于总线方式的[3],数据是以广播方式发送的,也就是说局域网内的每台主机都在监听网内传输数据,以太网硬件将监听到地址相比的数据帧所包含的地址与自己的比较,如果相同,则接收该帧,否则丢掉它,这就是以太网的“过滤”规则(由交换机完成).但是,如果把设置为“混杂模式”,它就能接收传输在网络上的每一个信息包.网络嗅探器就是依据这种原理来监测网络中流动着的数据.网络嗅探器一般情况下由以下几部分组成:
(1)计算机网络硬件设施.如:路由器、网卡等.
(2)监听驱动程序.用以截获数据流、过滤数据包并将数据存入缓冲区.
(3)捕获驱动程序.这是最重要的部件,它直接控制网络硬件从信道上抓取数据,并将数据存入缓冲器.
(4)缓冲器.这是用来存放捕获到的数据的容器.
基于Winpcap的网络数据包捕获程序包括程序捕获与用户外部分析两个部分,其中程序捕获部分负责从网络中捕获数据,并过滤数据包;用户外部分析部分则是负责数据处理、格式化、协议分析等.具体程序如下:
(1)选择一个端口进行捕获.
(2)初始化捕获程序.
(3)设置过滤器.
(4)捕获数据.
(5)解析数据包.
(6)在捕获到所需的数据后,关闭会话并结束进程.
Winpcap的工作原理如图1所示:
图1 Winpcap工作原理示意图Fig.1 Working principle diagram of Winpcap
pcap_findalldevs_ex()函数能够实现对本机网络适配器列表的获取,通过返回链表来显示适配器的详细信息[4].数据域name表示的是适配器名称、description是对适配器进行描述.功能实现代码如下:
获得适配器的信息后就需要打开网络借口进行数据捕获,打开适配器功能的函数是pcap_open().需要注意的是,适配器有四种模式,即多播、广播、混杂和直接模式.通常情况下,当其处于缺省模式时,适配器只接受发给它自己的数据包.当适配器设置为混杂模式时,可以捕获所有流经它的数据包.因此,必须将适配器设置为混杂模式.
接下来进行数据捕获.有两种方法,分别是:pcap_next_ex()方法和pcap_loop()方法.pcap_loop()是基于回调原理,系统直接调用,用户程序无法直接控制.pcap_next_ex()函数是基于程序员调用的.每调用一次便可捕获一个数据包,捕获后立即调用PacketHandle对数据包进行分析处理[5].
WinPcap最强大的特性之一,是拥有过滤数据包的引擎.过滤数据包功能由pcapcompile()和pcap_setfilter()函数实现.实现代码如下:
该模块的主要功能就是对捕获的数据包按照网络协议的层次自底向上进行分析,最后将分析结果显示输出.
图2和图3是预先写的一个是否能获得网卡信息和打开网卡捕获数据包的测试程序截图.运行程序后成功的扫描到本机上的信息,有两块可用的网络接口,图中显示网络接口的描述.其中第一个网号工具,第二个是本机网卡,提示选择接口号以便打开网卡开始捕获数据包,所以输入的网卡在项即输入2,输入之后从下图中可以看到监听本机网卡然后成功捕获到数据包并打印出了结果,其中包括源、目的IP地址,源、目的端口号,时间戳和包长.程序运行成功,功能实现.
图2 捕获网卡信息截图Fig.2 The screenshot to capture network card information
图3 打开网卡捕获数据包的测试程序截图Fig.3 The screenshot of test program to open the network card capturing data packet
图4 获取数据包时间示图Fig.4 Time diagram to get date packet
由图4不难发现,平均每个数据包的获取时间为625ms.
实际的应用过程中,上述的代码放到IPMAN程序中,便可替代之前的代码,使之后的代码能够抓取网络层的其他数据包,如ICMP、ARP、RARP等数据包顺利地完成了抓包的任务.
目前,随着无线局域网的应用日益增长,无线局域网的安全也越来越受到关注.建立一个不安全的无线局域网非常简单,但不受保护的无线网络是非常容易收到攻击的.因此,无线网络的安全问题成为制约网络发展的一个瓶颈.
当前无线网络可用的安全协议标准是WEP算法.它定义了一套指令和规则,使无线数据在通过空中电波传输时,能获得最起码的安全.它能够阻止非法用户的进入,但WEP无法确保合法用户的身份不被非法入侵者冒充,攻击者可在短时间那免费接入到WLAIN中.除此以外,WPA安全协议还存在硬件兼容性的问题.目前,只能通过Ipsee VP'N平台,为有线与无线客户设备和远程主机进行验证并提供安全访问.因此,利用网络嗅探器等监听技术对无线网络数据进行捕获和分析对于无线网络的安全具有很大的意义,这也将成为网络嗅探数据包捕获程序进一步的发展方向.
Winpcap编程功能强大,对于网络数据捕获和分析应用程序来说非常好用.但本程序还存在一些需要改进的地方:
(1)进一步改进跨平台运行的兼容性问题.
(2)还不能在交换网络中应用,当然更不能对跨国路由器进行检测.
尽管基于Winpcap的网络数据捕获软件有其的局限性,但它依然是一种良好的技术,为将来发展无线网络安全应用提供了必要的前提和基础,通过对这方面的研究,可以更深刻的理解网络理论知识,也提高了网络编程的技巧.
[1]赵建勋.基于 WinPcap网络数据包捕获实现[J].西安文理学院学报(自然科学版).2011,14(4):55-58.
[2]赵钢.基于winPcap的网络嗅探器设计与实现[J].电脑知识与技术.2013,9(5):3506-3508.
[3]吴功宜,董大凡,王裙,等.计算机网络高级软件编程技术[M].北京:清华大学出版社,2008.
[4]甘彪,凌小峰,宫新保.基于动态内存池和WinpCap的高速数据捕获技术[J].信息技术.2012,(1):70-74.
[5]魏敏,奚茂龙,周阳花.基于 WinPcap的网络数据解析系统[J].计算机安全.2010,(10)49-51.