基于Windows平台的网络流量统计及控制系统的设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于Windows平台的网络流量统计及控制系统的设
计与实现
夏义三
北京邮电大学信息工程学院,北京(100876)
E-mail:bupt.ip@
摘要:介绍了一种Windows平台下的针对个人微机的网络流量统计及控制系统的总体设计及各个功能模块的实现,给出了系统的架构、软硬件环境以及部分程序代码。
关键词:流量统计,流量控制,传输服务提供者
中图分类号:TP393
1. 引言
在网络管理过程中,网络流量监控是一个重要部分。有效的网络流量监控不仅能够让网络管理人员及时了解网络的运行状态,并且能够对网络出现的问题做出及时调整和排除。目前,绝大多数的网络流量监控系统都部署在一个网络的出口处,有串联和旁路两种方式,这是对全网流量进行统计和控制的常用方法。本文所讲的网络流量统计与控制系统立足于Windows平台的用户终端上,通过中央服务器进行控制,为企业网络管理员提供后台监控和保护敏感信息的手段,以便保障企业的网络运行和信息安全。本文对该系统的原理、设计进行了介绍和分析,并给出了一种切实可行的实现办法。
2. 系统的设计原理
在个人微机上实施网络流量统计与控制的方法有很多,可以在TCP/IP协议栈的多个层来实现。在各个层上实现的方法不同,实现的难度和执行情况也不同。本系统以COM技术为基础,综合运用了DOM,SPI等技术,采用插件式架构,具有低耦合,自更新的特点,适用于分布式网络。系统包括客户端和服务器两个部分,客户端实现流量统计和控制功能,服务器负责存储客户端上报的流量数据,以便管理员查询,管理员还可通过服务器下发具体的流量控制策略。
2. 1 客户端的设计原理
流量统计功能在TCP/IP协议栈的数据链路层实现,具体原理是建立一个原始套接字并将其绑定到网卡上,之后就可以通过该套接字的接收缓存获得经过网卡的数据包,从而进行流量的分析和统计工作。
流量控制功能在TCP/IP模型的应用层实现,具体原理是利用Windows系统的SPI(传输服务提供者接口)来截获上层应用程序所发的Winsock调用,Winsock调用包括WSPSocket、WSPCloseSocket、WSPBind、WSPAccept、WSPConnect、WSPSend、WSPSendTo、WSPRecv、WSPRecvFrom[1]。从这些Winsock调用中可以取得在该socket上进行发送和接收的数据,对这些数据进行分析处理,确定它们所属的业务类型及连接信息,将这些信息与从服务器端下发的流量控制策略匹配,得到控制动作,实施控制行为,从而实现流量控制的功能。
2. 2 服务器端的设计原理
为了能定量的观察和控制各用户终端的网络行为,该系统还包含服务器端。所有安装了该系统客户端的用户终端都会注册到本服务器,并将流量数据及流量控制的记录上报给服务器,系统管理员在登陆到服务器之后,可以通过WEB浏览器管理企业用户信息、查询企业内各用户终端的流量,并可配置流量控制策略并实时更新到各终端。
服务器与客户端的工作情况用以下原理图表示:
client client client
图1 服务器与客户端工作原理图
Fig1 working principle of server and client
3. 系统的各模块介绍
由于该系统分客户端和服务器两个部分,且二者必须实时通信。为了保证客户端程序在本地运行的可靠性,以及应对随时可能出现的问题,综合诸多因素,决定将客户端程序按功能划分成几个功能单元,不同功能单元(称为服务)通过这些服务之间定义良好的接口联系起来。接口是采用中立的方式进行定义的,它应该独立于实现服务的硬件平台、操作系统和编程语言。这使得构建在各种这样的系统中的服务可以以一种统一和通用的方式进行交互。
以下是系统模块通信示意图:
图2 系统模块通信示意图
Fig2 communication between system modules
各模块均被设计成COM组件的形式,都以EXE形式存在,模块之间的通信依靠定制的接口。在用户终端上安装本客户端后,每当终端上的Windows系统启动完成,由加载程序将核心模块加载进内存,然后由核心模块启动通信模块、流量统计模块以及流量控制模块,通信模块与流量统计/控制模块级别相同,但启动顺序优先。模块之间使用标准的服务接口连接,组件之间较小的数据传输使用内部消息传递,较大的数据传输使用共享内存或者临时文件方式。以下简要介绍各模块的功能。
核心模块主要是负责系统的基本服务,如系统启动停止、消息的转发、进程状态监视等。核心模块由于始终运行于系统内存中,要实时监控其他程序运行,因此要求设计精简,最大化的与其他模块独立,只提供基本的服务。核心模块按功能又划分为组件管理器、消息转发器、运行时监视器。每次核心模块启动后,组件管理器负责遍历所有的模块目录,生成模块树,按依赖顺序启动模块,然后在内存中生成模块名与模块编号相对应的模块状态表,以供其他模块查询。模块间的消息通信由消息转发器负责传递。定时对各个模块的运行状态进行轮询,并根据需要启动、关闭或更新某些进程。当在系统运行中启动或者终止某些插件时,应以广播方式通知所有模块。
通信模块由核心模块启动,主要为流量统计和控制模块提供一些基础服务,如将这两个模块的日志上传给服务器,以及将从服务器下发的流量控制策略实施到流量控制模块。
流量统计模块对用户的网络流量进行统计及上报。通过建一个原始套接字并将其绑定到网卡上,之后就可以通过调用标准的recv函数[2],从该函数对应的接收缓存中取出经过网卡的每个标准的IP数据包;然后对每个IP数据包进行分析。这不仅仅是统计出一个总流量,还要按类型统计,具体类型有浏览网页、WEB杂项、BT下载、QQ聊天、网易泡泡、雅虎通聊天、FTP下载等。因此需要对IP包的包头和数据部分进行分析。分析的结果存入哈希表,在核心模块规定的上报时间内上报给服务器。
流量控制模块对用户的网络流量进行检测,提取出需要监控的业务类型,并根据服务器下发的策略对这些网络通信进行控制。主要是基于SPI技术,SPI以动态链接库(DLL)的形式存在,它工作在应用层,为上层API调用提供接口函数。讲自己编写的SPI程序安装