摘 要:网络数据包监测是网络安全领域一个很重要的环节,设计网络监测系统是网络安全管理的起点。本文引入了WinPcap工具,分析了基于WinPcap的网络监测系统的设计框架,说明了数据包在程序内部的处理流程,描述了程序应用模块的设计过程,最后给出了系统运行情况并总结了其性能。
关键词:网络安全;WinPcap;网络监测;数据包
1 引言
随着信息技术的发展,计算机网络应用日益广泛,随之而来的安全问题也越来越受到重视。无论是政府、学校还是公司企业,都有系统内部的敏感数据需要保护[1]。而计算机网络具有的连接形式多样性、终端分布不均匀性和网络的互连性、开放性等特征,使网络容易受到黑客、恶意软件等的攻击,所以,要确保网络信息的完整性、可用性和保密性,网络的安全措施必须能全方位地应对自身的脆弱性和各种网络威胁。因此,网络数据安全保障工作便是一个非常重要的课题。网络监测就是在网络安全管理过程中,对网络数据进行监视和测量,它利用计算机或网络设备捕获本地网络数据包和远程数据包并对数据内容进行分析处理。
目前,网络监测可用硬件和软件两种方式实现。硬件方式实时性好但费用高、且灵活性差;软件方式灵活方便、费用低,本文采用软件方式实现网络数据包监测系统的开发。分析了当今网络数据包捕获与监测的实现原理、方法和手段之后,本文详细地讨论了基于WinPcap的网络数据包捕获与协议分析的方法,阐述了网络数据包监测系统的开发过程。
2 系统设计原理
WinPcap是一个网络程序的开发工具包,它源于BPF(Berkley Packet Filter)和Libpcap函数库,专门支持Windows的网络监测程序设计。它包括三个组件:NPF(网络包过滤器)、Packet动态链接库和WinPcap动态链接库。WinPcap支持网络原始数据包的接收和发送,绕开了TCP/IP协议栈,隔离了与网络驱动相关的硬件细节,封装了Windows下的系统调用,并且源代码开放,有利于高速的数据包检测和分析。
2.1 系统架构
网络数据包监测的首要工作是先要捕获到数据包,然后再对数据包进行相关分析。本系统基于WinPcap函数库设计,其系统工作架构如图1所示。
图1中阴影区域就是整个网络监测系统的组成,共分为两个部分:核心态部分,即NPF(网络数据包过滤器);用户态部分,包括了Packet动态链接库、WinPcap动态链接库和应用模块。网络监测系统通过NDIS接口与底层的NIC(网络接口设备)驱动程序交换数据。
1、核心态部分NPF
网络数据包过滤器NPF(Netgroup Packet Filter)是WinPcap的核心部分,它的功能是捕获和过滤数据包,同时还可以发送、存储数据包以及对网络进行统计分析。这个底层的包捕获驱动程序实际为一个协议网络驱动程序,通过对NDIS中函数的调用实现数据包的捕获与发送等功能。
捕获数据包是NPF最重要的操作。在抓包的时候,网络接口驱动程序使用一个网络接口监视着数据包,并将这些数据包完整无缺地投递给用户级应用程序。
2、用户态部分
与用户进行交互,接收用户定义的各种监测参数,并以可读的方式把监测到的网络数据提交给用户,帮助用户对数据包进行统计分析。其中,Packet动态链接库处于应用模块与NPF之间,以动态链接库的形式提供编程接口,保证上层应用代码独立于底层的实现;WinPcap动态链接库是一个对Packet库进行封装了的链接库,它作为Windows版的Libpcap,与UNIX下的Libpcap兼容,向上层应用模块提供库函数。应用模块则是根据具体的网络监测需要设计的各种应用功能。
2.2 数据包处理流程
本系统通过对网络适配器NIC的设置,绕开TCP/IP协议栈,实现原始网络数据包的实时采集。图2是数据包处理流程。
图2 数据包处理
图2说明了数据包从NIC采集进来到提交给用户所经历的处理阶段,其中阴影部分是数据包在本文网络监测系统中的流动过程。
1、数据包采集阶段
网络接口卡NIC把采集到数据包直接存放到网卡缓冲区中,并向计算机总线控制器发出总线使用请求。获得总线使用权后,NIC直接把缓冲区数据拷贝到操作系统的NIC driver buffer(网卡驱动程序缓冲区)中。拷贝完成后,NIC向中断控制器发出中断请求。CPU响应中断请求后开始执行网卡的中断服务程序,并把大量后续工作留给DPC(延迟过程调用)来处理。
2、数据包过滤阶段
在实现时,NPF采用钩子的办法在操作系统插入一个回调函数tap( ),当有数据包到来时,该函数就会被执行。NIC产生的DPC被执行时,会触发了回调用函数tap( )。tap的主要工作就是过滤,判断数据包是否满足过滤条件。如果满足的话,就把数据包从NIC driver buffer中拷贝到NPF的Kernel buffer(内核缓冲区)中。当对高速网络进行数据包采集时,该缓冲区必须设置得足够大,以减小丢包的可能性。
3、数据包应用阶段
AM(应用模块)可以采用同步和异步两种方式从NPF的缓冲区中读取数据。应用程序通过调用可阻塞的读函数来完成同步操作,当NPF的缓冲区Kernel buffer非空时,读函数把数据包拷贝到AM的User buffer(用户缓冲区)后立即返回;NPF的缓冲区为空时,读函数就被阻塞,直到缓冲区中有数据包到来为止。数据包进入到应用模块定义的用户缓冲区后,就可以用来进行分析、计算等操作了。
2.3 软件开发
本系统在Windows平台和VC++6.0编程环境中进行开发。由于是基于WinPcap函数库开发的,之前需下载并安装WinPcap开发包。系统的软件开发流程如下:首先指定网络设备,通过调用WinPcap库函数pcap_findalldevs( )列出当前计算机所有可用的网络接口设备,并指定一个用来捕获数据包;然后打开捕获数据包的网络设备,调用WinPcap库函数pcap_open_live( ) 打开网络接口设备,并返回一个设备描述字以供操作;接着定义包过滤条件,调用WinPcap库函数pcap_compile( )定义过滤条件,调用pcap_setfilter( )设置过滤器;读取数据包,调用pcap_next_ex ( )完成数据包捕获工作;最后分析数据包。按照TCP/IP的协议格式从数据包分离出MAC地址、MAC帧类型、IP地址、数据包类型等。其开发流程图如图3所示。
本系统完成了本机网卡数据的实时捕获以及数据信息跟踪显示。首先获取网络设备,查找到本机网络设备信息后,选择需要监视的设备,然后就可以“开始监测”了。图4是获取的网络数据包信息。
图4 网络数据包信息
图中数据
包信息的每个字段的含义分别是:包捕获时间;时间戳(微秒级精度);len: 数据包的长度;协议类型(0x0800表示IP协议数据);(描述);源IP地址:源端口号 ->> 目标IP地址:目标端口号。
4 结论
通过网络数据包监测系统的开发,证明了WinPcap是一款很优秀的Windows网络监测程序开发工具,它的组件很容易部署,而且使用起来很灵活,移植性好。基于WinPcap的功能支持,网络监测系统能够有效地捕获网络中的各种原始数据包,从而实现对网络数据的实时监视、分析和测量。
参考文献
http://www.winpcap.org/docs/docs_40_2/html/main.html