当前位置:文档之家› 流量监控系统的研究与设计

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

流量监控系统的研究与设计
【摘要】网络监控系统作为网络管理的一部分起着极为重要的作用。本文所
设计的基于流量分析的网络监控系统实现了对本地网络流量的实时监控、统计分
析以及异常流量的查询功能,并能对网络中存在的拒绝服务攻击进行检测。

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

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

1Winpcap网络编程介绍
数据包的捕获需要能够做到以下几点功能:
(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等洪水攻击)以
便用户采取相应的措施。

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.

相关主题