基于Snoop组件(包捕获)的网络流量采集系统的设计与实现
2016-04-17张立新
张立新
摘 要:本文对基于包捕获的网络流量采集技术进行了分析,着重给出了基于Snoop组件(包捕获)的网络流量采集系统的设计与实现。
关键词:包捕获;网络流量采集;Snoop组件
1 基于包捕获的数据采集方法
1.1 以太网数据传输原理
网络适配器常用的两种接收模式是普通模式和混杂模式。在普通模式下,网络适配器只接收数据包中目的MAC地址为本机的数据包,而对于除了广播和组播数据包以外的其它包一律丢弃。在混杂模式下,所有经过检测系统主机的数据包都会被接收。
为了能够监听到该网络中所有主机的数据包,可在交换机中设置监控端口和受控端口(被监听端口),受控端口一般为核心交换机连接防火墙的电口或光口,监控端口连接监控计算机或抓包设备(其网络适配器工作模式置于混杂模式),这样就可以将受控端口的数据包复制到监控端口,从而就可以捕获或监听到通过核心交换机的各主机网络数据包。其工作流程如图1所示。
1.2 WinPcap简介
本研究系统使用的Snoop数据包捕获组件基于WinPcap数据包捕获函数库。WinPcap是Windows平台下一个免费、公共的网络驱动开发包,工作于数据链路层,用于对IP分组的捕获,可为Win32应用程序提供访问网络底层的能力。它基于UNIX的Libpcap和BPF模型开发,包括内核级的数据包过滤器NPF(Netgroup Packet Filter)、底层动态链接库(packet.dll)和高级系统无关性库(wpcap.dll)。WinPcap可提供以下各项功能:捕获原始数据包,包括各主机发送/接收的及相互之间交换的数据包;在网络上发送原始的数据包;收集网络通信过程中的统计信息。
2 Snoop组件介绍
2.1 Snoop组件工作原理
Snoop组件是用Delphi开发的捕获数据包组件,其底层封装了WinPcap,把对数据包的处理用函数封装起来实现,用户编程时可专注于数据包分析,无需使用WinPcap提供的复杂操作对原始包进行处理,只需用Snoop提供的函数,即可将捕获的数据包进行分类处理。
2.2 Snoop组件相关函数
(1)snoopIsIP(EthernetHeader:PETHERNET_HDR;IPHeader:PPIP_HDR=nil):Boolean。此函数返回值为布尔型。它将以太数据包EthernetHeader从网卡接收进来后,判断其是否为IP数据包。如果是IP包,则返回true,并将IPHeader指向该IP包对应的包头,以便进一步处理;否则返回false,IPHeader赋值为nil。其他的函数,如snoopIsARP、snoopIsICMP、snoopIsTCP和snoopIsUDP等用法类似,分别判断数据包是否为ARP包、ICMP包、TCP包和UDP包,在处理上也类似。
(2)snoopMac2Str函数用于将网卡的Mac地址转换为字符串;snoopIP2Str函数将数字表示的IP地址转换成字符串形式;snoopstr2Mac函数是snoopMac2Str的反函数,snoopstr2IP函数是snoopIP2Str的反函数,分别与其作相反的操作;snoopSendPacket函数可以向外发送数据包。
2.3 Snoop组件数据包过滤模块设计
若捕获所有数据包则数据量非常大,要求很强的处理能力和大量的储存空间,而且有时我们也只捕获感兴趣的数据包。例如:对Web系统进行监控只需要端口号为80的TCP数据包,信息包过滤机制的引入来解决上述问题。
3 基于Snoop组件的流量采集系统设计
3.1 功能描述
流量采集模块要抓取所有流经核心交换机受控端口的Pcap文件格式的原始网络数据包,为此要设置捕获的初始化参数,选择捕获来源,并进入循环抓包过程。
3.2 网络数据包格式
使用Snoop组件捕获的网络数据包格式实际上是Pcap文件格式,详情分析如下,Pcap文件头24B各字段说明。
(1)Magic:4B:0x1A 2B 3C 4D,用来标示文件的开始;
(2)Major:2B,0x02 00,当前文件主要的版本号;
(3)Minor:2B,0x04 00,当前文件次要的版本号;
(4)ThisZone:4B,当地的标准时间,全零;
(5)SigFigs:4B,时间戳的精度,全零;
(6)SnapLen:4B,最大的存儲长度;
(7)LinkType:4B,链路类型,如1表示Ethernet,and Linux loopback devices(以太网类型,大多数的数据包为这种类型),更多详细内容因篇幅原因省略。
4 基于Snoop组件的流量采集模块实现
由于Snoop组件基于WinPcap库来实现,故其捕获流程与WinPcap相似。在进行包捕获前,需要将实施流量采集功能的计算机网卡设置成混杂模式,然后设置过滤条件、读超时和捕获的数据包长度,并选择数据包捕获来源,最常使用的是本机捕获,最后选择进行捕获的网卡并打开Snoop组件实现循环包捕获。
所有初始化工作完成之后,要选择捕获数据的来源,可为文件捕获、本机捕获和远程捕获。文件捕获需要指定以前保存的Pcap数据包捕获文件,然后系统可将该文件包含的数据包进行协议解析后还原。用得较多的是本机捕获,此时需要选择要使用的网卡。AdapterIndex是网卡的序号,给它赋值是把Snoop控件与本机的某一网卡联系起来,以确定接收从哪个网卡进来的数据包。利用Open方法把该Snoop控件打开,使其开始工作,然后就可以在Snoop控件的OnCapture事件中编写网络数据包处理程序。为了确定它在工作,使用Active属性判断一下。远程捕获和本机捕获类似,但在捕获之前需要设置远程捕获计算机的IP、用户名和密码等登录信息。在结束流量采集工作时,把网卡设为正常模式,关闭Snoop控件。语句如下:SnoopSniff.Flags:=0;SnoopSniff.Close。
5 结束语
基于Snoop组件的流量采集系统可通过Snoop组件实时获取流经核心交换机受控端口的各主机网络数据包,为后续网络流量数据的统计与分析提供基础数据来源。
参考文献
[1] 孙钦东.网络信息内容审计[M].北京:电子工业出版社,2010:26-50.
[2] 谭献海.网络编程技术及应用[M].北京:清华大学出版社,2006:183-204.
[3] 吴功宜,董大凡,王珺,等.计算机网络高级软件编程技术[M].北京:清华大学出版社,2008:406-407.
[4] 郑成兴.网络入侵防范的理论与实践[M].北京:机械工业出版社,2006:34-95.
[5] PCAP文件格式协议分析[J/OL].http://www.net527.cn/a/luyoujiaohuan/Ciscojishu/2010/0209/5527.html,2010-02-09.