APP下载

winpcap技术在无线局域网优化分析中的应用

2017-06-06魏焕新

卷宗 2017年6期

摘 要:WLAN是利用无线通信技术在一定的局部范围内建立的网络,是无线通信技术与计算机网络相结合的产物,它以无线多址信道作为传输媒介,能够使用户真正实现随时、随地的宽带网络接入。在最近的几年里,WLAN由于具有组网灵活、价格低廉、高速数据接入及频段开放等优势,已经在商业楼宇、学校、宾馆、医院等场合得到了广泛地应用,它已经成为宽带接入的有效手段之一,并且使用WLAN的区域以及承载的业务越来越多,已形成了较大规模的网络。为保证WLAN建设高密度场景用户使用的效果和最终体验,必须要对WLAN进行优化,来满足日益扩大的业务发展需要。因此需要建立一套科学、合理、高效的系统,来监测WLAN网络的质量并及时进行优化。本文主要针对通过winpcap技术如何对WLAN进行分析及优化。

关键词:无线局域网;winpcap技术;网络优化

基金项目:湖南省发改委科技创新项目,基于大数据的WLAN分析优化平臺的研究与设计(2014F12700)

Unix系统中最著名的BSD包截获结构便是WinPcap的主要思想来源。它由内核态的网络组包过滤器(Netgroup Packet Filter, NPF)、用户态的动态链接库Packet.dll和Wpcap.dll等3个模块构成:(1) 网络数据包过滤器是Winpcap的核心部分,它是Winpcap完成困难工作的组件。它处理网络上传输的数据包,并且对用户级提供可捕获、发送和分析性能。(2)低级动态链接库。Packet.dll是存放在Windows系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。在正常情况下不建议用户对该类文件进行随意的修改,它的存在对维护计算机系统的稳定具有重要作用。使用Packet.dll开发的数据包截取程序可以运行在不同的Win32平台上而不需要重新进行编译。提供了一个底层API,这些API可以直接用来访问内核 (3)高级动态链接库。Wpcap.dll为包捕获应用提供了一个高级的编程接口,它是从Libpcap发展而来并且相互兼容,所以wpcap.dll包含了Libpcap具有的函数。Wpcap为了要与硬件接口,还直接调用了packet.dll提供的函数。另外,在Libpcap提供的功能基础上还增加了数据包发送和统计等功能,为此增加了一些函数。pcap_setbuff:该函数用于设置包缓冲区的大小。pcap_setmode:该函数用于设置网络适配器接口的工作模式。pcap_stats:该函数用于获取包捕获过程的统计数据。

WinPcap利用这3个模块提供了以下四个功能:

1)获取原始数据包,包括在共享网络上各个主机发送/ 接收的及互相之间交换的数据包;

2)在数据包发给应用程序之前,按照自定义的规则将某些符合条件的数据包过滤掉;

3)在网络上发送原始的数据包;

4)收集在网络通信过程中的统计信息。

在优化分析中,WinPcap技术用在数据采集子系统上。采集是在Windows server 2008操作系统平台上,利用VS2010 开发工具实现的,其中使用WinPcap API接口截获原始数据包。具体采集内容包括:读取服务器所有网络接口信息以便用户能自由选择网络接口;从数据链路上抓取流经本网卡的所有网络数据包;依据数据包相应的协议类型分析得出该数据包的接入类型、访问的域名、源IP地址、源端口,目的IP 地址,目的端口、数据包长度,流量等相关信息; 将信息以文件的形式解析出来,存放到服务器上,供数据库使用。

利用 WinPcap 驱动程序的库函数,将网卡设置为混杂模式,从数据链路上采集流经万兆网卡的所有网络数据包,然后对每个数据包按照其相应的网络协议来分析,获取其包含的网络信息,然后以文件的形式保存起来。考虑到网络中数据包的流量大,速度快,为了避免在系统进行分析和写文件时前端抓包出现部分丢包现象,以及为了确保数据包抓取后的真实性,winpcap一般通过多线程来进行结构化的设计,第一步执行数据采集线程,第二步执行解析线程,其中,全局数据包缓冲队列则为采集线程和解析线程共享以完成数据的交互和同步。为了实现数据的交互和同步,一般通过全局数据包缓冲队列,实现采集线程和解析线程共享。

使用WinPcap采集的Pcap文件基本格式为:文件头 数据包头数据报数据包头数据报。图是Pcap文件头的结构

对于每个Pcap文件头,系统通过一个pcap_file_header结构体来进行保存,该结构体定义如下:

sturct pcap_file_header

{

DWORD magic;

DWORD version_major;

DWORD version_minor;

DWORD thiszone;

DWORD sigfigs;

DWORD snaplen;

DWORD linktype;

};

其中,magic是32位的标识位,这个标识位的值是16进制的 0xa1b2c3d4。Version_major是16位的主版本号,默认值为0x2。Version_minor是16位的副版本号,默认值为0x04。Thiszone是32位的区域时间,实际上该值并未使用,因此可以将该位设置为0。Sigfigs是32位的精确时间戳,实际上该值并未使用,因此可以将该值设置为0。Snaplen是32位的数据包最大长度,该值设置所抓获的数据包的最大长度,如果所有数据包都要抓获,将该值设置为65535;例如:想获取数据包的前64字节,可将该值设置为64。Linktype是32位的链路层类型, 数据包的链路层包头决定了链路层的类型。其中caplen是32位的数据包长度,标识所抓获的数据包保存在pcap文件中的实际长度,以字节为单位。

WinPcap系统利用它自身提供的强大功能和丰富的网络数据包处理函数,可以实现对数据包处理,而且有严格要求,适用于对网络数据包进行抓取及便于进行分析

参考文献

[1]陈松乔,任胜兵,王国军.现代软件工程.北京:清华大学出版社,2008,210-350

[2]George Fairbanks. 恰如其分的软件架构.湖北:华中科技大学出版社,2013,340-395

[3]陈吉平. 构建0racle高可用环境:企业级高可用数据库架构、实战与经验总结. 北京:电子工业出版社,2008,245-302

[4]姜江.PowerDesigner数据库系统分析设计与应用. 北京:电子工业出版社,2004,78-99。

作者简介

魏焕新(1983-),男,湖南长沙人,硕士研究生,湖南机电职业技术学院信息工程系讲师,研究方向为计算机应用技术。