基于Windows平台的网络流量统计及控制系统的设
计与实现
夏义三
北京邮电大学信息工程学院,北京(100876)
E-mail:bupt.ip@gmail
摘要:介绍了一种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程序安装
到系统之后,所有的Winsock请求都会先发送到这个程序并由它完成网络调用。所以,我们在这里可以得到所有socket的信息,并对它们进行分析,得到五元组信息[3],并确定它们所属的业务类型。本系统可以根据报文四元组(目的IP、协议类型、目的端口、源端口)以及业务类型(QQ聊天、BT下
载、网易泡泡、雅虎通聊天等)进行控制,决定其是通过还是被阻止。
4. 系统的实现
4. 1 开发平台
本系统是基于面向服务思想的,虽然独立于编程语言,但由于该系统主要运行于WIN32环境中,出于兼容性和效率两方面的考虑,所以客户端使用C/C++和XML语言,开发工具是Microsoft Visual Studio 2005,服务器端使用Java/JSP和SQL语言。
客户端的运行环境为:Windows NT + Microsoft .NET Framework 2.0;服务器的运行环境为:Windows NT + JRE5.0 + Tomcat + MySQL;硬件环境:要求客户端和服务器端可以访问互联网。管理员在登陆服务器之后,可以通过WEB浏览器管理各用户信息、查询客户端所在的用户终端流量,并可下发流量控制策略。以下是整个系统的开发框架:
图3 系统开发框架图
Fig3 system development framework
4. 2 部分程序
为简化模块的调用过程,将所有模块设计成COM组件的形式。所有模块使用统一接口,使用uuid区分
不同模块的接口。当初始化成功后,模块就通过统一的消息传递来与其他模块通信,通过消息的解析来完成相应的功能。部分程序如下:
(1)建原始套接字,并将其绑定到网卡
SOCKET sock = socket(AF_INET, SOCK_RAW, IPPROTO_IP);
char LocalName[100];
gethostname(LocalName, sizeof(LocalName));
hostent *pHost;
pHost = gethostbyname(LocalName);
SOCKADDR_IN addr_in;
addr_in.sin_addr = *(in_addr *)pHost->h_addr_list[0];
addr_in.sin_family = AF_INET;
addr_in.sin_port = htons(56789);
bind(sock, (PSOCKADDR)&addr_in, sizeof(addr_in));
(2)安装及卸载分层服务提供者的函数
WSCInstallProvider(&ProviderGuid, pwszPathName, &LayeredProtocolInfo, 1, &nError); WSCDeinstallProvider(&ProviderGuid, &nError);
(3)初始化模块信息的结构体
typedef struct{
int num;
char pluginName[MAX_PLUGIN_NAME_LEN];
char pluginVersion[MAX_PLUGIN_VERSION_LEN];
}ModuleInfo;
(4)向服务器上报消息的结构体
typedef struct{
filename[MAX_FILE_NAME_LEN];
char
char pluginname[MAX_PLUGIN_NAME_LEN];
char command[MAX_COMMAND_LEN];
char option[MAX_COMMAND_LEN];
}DataReport;
(5)接收服务器消息的结构体
typedef struct{
char command[MAX_COMMAND_LEN];
char para1[MAX_COMMAND_LEN];
char para2[MAX_COMMAND_LEN];
char file[MAX_FILE_NAME_LEN];
}DataReceive;
5. 结论
本文给出了一个网络流量统计及控制系统的设计与实现,基于该系统框架的软件已经开发出来,实际使用结果表明本文所述的系统设计是可行的,能够满足一般规模的网络测量的需要。
本系统还可以改进的地方是可以把记录流量控制策略的数据结构改成哈希结构,这样能够缩短匹配策略的时间。这将在后续的开发中根据需要改进。
参考文献
[1] 朱雁辉.《Windows防火墙与网络封包截获技术》[M].北京:电子工业出版社,2001.
[2] 王艳平,张越.《Windows网络与通信程序设计》[M].北京:人民邮电出版社,2005.
[3] W.Richard Stevens《TCP/IP详解卷1:协议》[M]. 范建华,胥光辉,张涛,等译.北京:机械工业出版社,2005.
Design and Implementation of a Net flow Statistic and Controlling System Based on Windows Flat
Xia Yisan
School of Information Technology,Beijing University of Posts and Telecommunications,Beijing
(100876)
Abstract
This paper introduces the general design of a net flow statistic and controlling system based on Windows flat, including the implementation of each function modules. Also gives a description of the framework, software and hardware environment and some source code.
Keyword:flow statistic,flow controlling,SPI
作者简介:夏义三,男,1982年生,硕士研究生,主要从事网络流量监控方法的研究和应用。windows开发平台
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论