流量监控系统的研究与设计

2012-08-15 00:54余翀翀
科技视界 2012年12期
关键词:网络流量数据包流量

余翀翀

(华侨大学网络与教育技术中心 福建 厦门 361021)

0 引言

目前,业界相关的研究基本都是通过对数据流量进行分析,找出可以真实反映网络的数学模型,例如自相似模型,但仍然不能全面客观地反映网络的真实状态。事实上,要达到对网络性能的有效监测,获得真实的流量数据,并对这些数据进行详细的定性定量分析,才是真正有效的方法。流量测量还可以实现监测拥塞链路,拒绝服务攻击,满足服务等级的QoS策略等功能。因此,研究并实现相应的监控系统是至关紧要的。

网络流量监控系统对网络内到达本地服务器的所有数据包进行分析,掌握当前网络总流量,同时可以根据不同的需要对特定端口或特定外部地址进行监视,防止非法入侵,以保障本地网络系统的安全和稳定。[1]网络监控能使系统及时地发现网络流量异常的现象,使服务器在发现非法入侵后能立即做出反应,来保护自己的服务器不被破坏,以求获得安全性的同时,提高网络性能。

1 Winpcap网络编程介绍

(1)捕获原始数据包,包括在共享网络上各主机的交换数据包;

(2)在数据包发往应用程序之前,过滤掉某些特殊的数据包;

(3)发送原始的数据包;

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

Winpcap用于windows系统下的直接的网络编程。大多数网络应用程序访问网络是通过广泛使用的套接字。这种方法很容易实现网络数据传输,因为操作系统负责底层的细节(比如协议栈,数据流组装等)以及提供了类似于文件读写的函数接口。Winpcap的主要功能在于独立于主机协议 (如TCP-IP)而发送和接收原始数据报。Winpcap的组成主要由三个模块组成。第一个模块NPF(Netgroup Packet Filter),是一个虚拟设备驱动程序。它的功能是过滤数据包,并把这些数据包原封不动地传给用户态模块,这个过程中包括了一些操作系统特有的代码。第二个模块packet.dll为win32平台提供了一个公共的接口。不同版本的Windows系统都有自己的内核模块和用户层模块。Packet.dll用于解决这些不同。调用Packet.dll的程序可以运行在不同版本的Windows平台上,而无需重新编译。第三个模块Wpcap.dll是不依赖于操作系统的。它提供了更加高层、抽象的函数。packet.dll直接映射了内核的调用。Wpcap.dll提供了更加友好、功能更加强大的函数调用[2]。

2 网络监控系统详细设计

根据流量分析系统的开发目的及设计目标,将系统定位于一个包含数据包捕获分析和数据存储、实时监控、数据查询与报警三个模块。

其中,捕获分析模块是系统的后台运行程序,通过使用Winpcap协议,对通过所监听的网络适配器的所有数据包进行捕获。这一部分主要采用C语言来编写,属于一些底层的操作,并且没有对所捕获的数据进行显示,而是通过前台用户界面调用数据库数据实现数据的实时监控功能。数据存储是基于前一个捕获分析模块所捕获并且分析过的数据包,对得到分析结果的数据包进行分类统计(基于不同网络协议或者不同网络服务),并把统计的结果存入到MySQL数据库中,以供前台显示程序调用[3]。该模块主要的任务就是MySQL数据库中建立好用于存储捕获分析模块分析所得的结果的数据库及指定的表格,建立好Visual C++对MySQL数据库的连接,最后就是将所得的结果存入指定的数据库中。

实时监控模块主要分数字监控和图形监控两个部分。其中数字监控主要通过连接数据库,每秒刷新一次数据库数据然后将查询所得的数据分类在前台显示实现实时监控,而图形监控是采用柱状图的形式显示用户计算机当前的输出流量、输入流量、总流量,也是每秒刷新一次数据。

数据查询与报警模块主要实现对后台捕获程序捕获的所有历史数据包进行分类查询,并且通过报警设置子模块对满足设置的数据进行筛选查询,如果发现数据异常,将提供报警功能 (如提示用户可能遭受UDP、ICMP等洪水攻击)以便用户采取相应的措施。

投影2:设直线ax-y+3=0与圆(x-1)2+(y-2)2=4相交于A、B两点,若弦AB的长为则a=________.

3 网络数据包的捕获分析研究

流量分析系统中数据包的捕获主要是通过调用Winpcap协议来捕获数据包的。Winpacp作为一个网络底层的驱动,提供了许多的API供开发人员调用,这些API提供了许多不同的功能,通过这些API可以实现诸多的功能,包括从简单的基本功能(如获取网卡的列表,数据包的捕获等)到统计和收集网络流量等高级功能[3]。

捕获数据包的具体具体实现如下:

(1)获得网络接口列表

通常,一个基于WinPcap的应用程序所要做的第一件事,就是获得适合的网络接口的列表.Libpcap中的pcap_findalldevs()函数就是用来获得适合的网络接口的列表的,返回一个pcap_if结构的列表。

(2)打开捕捉设备

使用函数pcap_open_live()来打开一个捕捉设备函数原型,在本系统中将此参数设置为1000,即系统捕获数据包进行分析统计的时间间隔是1秒。流量监控系统监控所得的结果都是每秒钟通过的数据包的流量。

(3)设置过滤器

过滤数据的函数是pcap_compile()和pcap_setfilter()来实现的pcap_compile()和pcap_setfilter()是用来编辑过滤器和设置过滤器的pcap_compile()来编译一个过滤设备,它通过一个高层的boolean型变量和字串产生一系列的能够被底层驱动所解释的二进制编码。boolean表示语法能够在这个文件的过滤表示语法中找到。pcap_setfilter()用来联系一个在内核驱动上过滤的过滤器,这时所有网络数据包都将流经过滤器,并拷贝到应用程序中。

(4)捕捉数据包

pcap_dispatch()或者pcap_loop()函数都可以用来捕捉数据包。这两个函数非常相似,pcap_dispatch()将会在超时后直接返回,而pcap_loop()则一定要等到一定数量的数据包被处理了以后才会返回,也可以用pcap_next_ex()来代替pcap_loop()来捕获数据包。

(5)保存捕获的数据包

WINPCAP为我们提供了很多API来将流经网络的数据包保存到一个堆文件并读取堆的内容。系统中采用pcap_live_dump将数据写到文件。pcap_live_dump有三个参数:一个文件名,和一个该文件允许的最大长度还有一个参数是该文件所允许的最大包的数量。对这些参数来说0意味着没有最大限制。

这里,我们可以在调用pcap_live_dump()前设置一个过滤器来定义哪些数据报需要存储,并且可以用pcap_live_dump_ended()来等检查是否数据存储完毕。

(6)收集网络流量的统计信息

WinPcap的另一高级功能:收集网络流量的统计信息。程序必须打开一个网卡并用pcap_setmode()将其设置为统计模式。在统计模式下编写一个程序来监视TCP流量只是几行代码的事情在设置为统计模式前可以设置一个过滤器来指定要捕获的协议包。

4 结束语

流量分析系统已经基本上达到预期的要求,能够在个人系统中测试使用,可以正常地监视网络的流量状况,对通过网络适配器的数据包进行捕获、分析、统计、显示、保存结果、数据查询。由于时间和技术上的原因还存在着一些没有解决好的问题。例如,实时监控中的图形监控,没有将各种协议包分开监控而是对用户计算机的所有输出、输入、总流量进行监控,比较笼统没有达到预期效果,需要在今后系统的完善中加以解决。

[1]郑成兴.网络流量预测方法和实际预测分析[D].北京:北京第二外国语学院教育技术中心,2006.

[2]翁剑锋.网络综合监控技术[D].上海:复旦光华,2006.

[3]黄庆炬,梅清.基于IP的网络监控系统设计与实现[D].湖北:湖北工业大学计算机学院,2006.

猜你喜欢
网络流量数据包流量
基于多元高斯分布的网络流量异常识别方法
冰墩墩背后的流量密码
张晓明:流量决定胜负!三大流量高地裂变无限可能!
基于神经网络的P2P流量识别方法
SmartSniff
AVB网络流量整形帧模型端到端延迟计算
五位一体流量平稳控制系统
网络流量监控对网络安全治理的重要性
视觉注意的数据包优先级排序策略研究
移动IPV6在改进数据包发送路径模型下性能分析