2012年第1期 计算机光盘软件与应用 Computer CD Software and Applications 软件设计开发 网络流量监控系统的设计与实现 王劲辉,张西红 (石家庄军械工程学院,石家庄050072) 摘要:在网络技术高速发展的同时,互联网的网络安全问题已经成为广泛关注的焦点,恶意攻击、病毒感染、非法 访问都是影响网络运行的主要问题,在目前网络安全体系中,针对流量的监控便是其中一种有效分析网络状况的办法,它 将从流量的角度来监控网络是否存在异常情况。 ・ 关键词:数据采集;网络管理;流量分析 中图分类号:TP393.07 文献标识码:A 文章编号:1007-9599(2012)01-0153-02 Design and Implementation of Network Traffic Monitoring System Wang Jinhui,Zhang Xihong (Shijiazhuang Ordnance Engineering College,Shijiazhuang 050072,China) Abstract:The rapid growth of network technology,the Internet network security issues have become the focus of widespread concern,malicious attacks,virus infection,unauthorized access are the main problems that affect the operation of the network,the network security system for traffic monitoring is all effective way analysis of network conditions,it will be monitored from the perspective oftraffic network ifthere are unusual circumstances. Keywords:Data acquisition;Network management;Traffic analysis 一、网络数据采集技术研究 (一)基于Windows的数据包捕获研究 目前网络上的数据捕获机制,在不同操作系统下体现的效果也不 一样,在Windows系统下,可以通过驱动程序的接口规范(简称 NDIS),WinSock的SOCKRAW或者用到虚拟设备驱动技术(简称 VxD)等来达到网络数据包的捕获功能。 (二)原始数据包捕获的关键函数 1.启动函数WSAStartup。int PASCAL FAR WSAStartup(DWORD wVersionRequested,LPWSADATA lpWSAData);每一个套接字应用 程序都必须调用该函数进行一系列初始化工作,并且只有调用成 功返回后,才能开始使用套接字,其中参数wVersionRequested 是版本号,高字节是次版本号、低字节是主版本号,参数 lpWSAData是指向WSADATA结构的指针。 2.套接字创建函数socket。SOCKET socket(int af,int type, int protoco1);所有的通信在建立之前都必须创建一个套接字, socket函数的功能就是创建套接字,其中参数af指协议地址族 (address family),当建立的套接字是依赖于UDP或TCP的话, 需要设置af为AF_INET,表示采用IP协议。参数type是指协议 的套接字类型,采用流式套接字时用SOCK—STREAM,采用数据报 套接字时用SOCK_DGRAM,采用原始套接字时用SOCK—RAW。参数 protocol是协议字段,默认情况下可直接设置为0。 3.绑定函数bind。int bind(SOCKET S,struct sockaddr in* name,int namelen);成功创建套接字后的下一步工作就是将本 地网络接口与套接字进行绑定,其中参数S是创建的套接字,参 数name是需要绑定的通信对象的信息结构体指针,namelen是该 结构的长度。需要注意的是sockaddr—in结构: struct sockaddrin{ short Sin family; //地址族,设置为AF INET unsigned short Sin port; //指定的端口号 struct inaddr sinaddr; //IP地址 char sinzero[8]; ); 由于主机序列与网络序列的关系,在程序中需要使用htons等函 数进行转换工作。 4.设置接口模式函数WSAIoct1 int WSAAPI WSAIoctl(SOCKET S,DWORD dwIoContro1Code,LPVOID lpvInBuffer,DWORD cbInBuffer,LPVOID 1pvOutBuffer,DW0RD cbOutBuffer,LPDWORD 1pcbBytesReturned, LPWSA0VERLAPPED lpOverlapped, LPWSAOVERLAPPEDCOMPLETIONROUTINE lpComp1etionRoutine); 其中,S为一个套接口的句柄,dwIoControlCode为操作控制 代码,lpvInBuffer为输入缓冲区的地址,cbInBuffer为输入缓 冲区的大小,lpvOutBuffer为输出缓冲区的地址, cbOutBuffer为输出缓冲区的大小,lpcbBytesReturned为输出实 际字节数的地址,lpOverlapped为WSAOVERLAPPED结构的地址, 1DC0mDleti0nRoutine为一个指向操作结束后调用的例程指针。 调用成功后,WSAIoctl函数返回0,否则的话,将返回 INVALID SOCKET错误,应用程序可通过wsAGetLastError来获取 错误代码。 5.数据接收函数recv。int recv(SOCKET S,char*buf, int len,int flags): 二、网络流量监控系统具体实现 (一)系统背景。本网络流量监控系统开发平台采用VC 6.0, 是目前主流的Winsock开发平台,具有非常强的适应性,能在多 操作平台上运行,界面简介,稳定性高。 (二)系统总体结构设计。通过分析当前用户需求,我们得 出以下特征: 1.需要对数据包进行解析,对数据包的源目地址、协议类型、 截获时间、数据内容都需要进行分析:2.对网络数据需要进行多重 捕获,同时设置网卡为混合模式,对数据进行采集;3.根据不同需 求能够按特定协议类型、特定地址范围或相关包等进行自定义的监 视;4.实现对日志分析记录,便于日后查找;5.监视结果能够有实 时流量图、列表等输出显示出来;6.对常见攻击进行发现处理。 结合上述分析,本系统采用Vc++语言编写,系统分为三个模 块:数据流量信息统计模块、捕获与显示模块、流量绘制模块等, 具体如图1所示。 图1 流量监控系统系统结构图 (三)流程图设计。根据上面对各个功能模块的划分,进行 更进一步的分析和设计,得到数据采集、注册表网络性能块访问 大致的工作流程图,如图2与图3所示。 r 。 r “ l, — 1 r —’} 凑 卜小 卜l瑟黼 l—I l _■■■■■■■_^…’_■●■●■●■’^’一 l 圈 l 图 l 囤一圈一囤 图2数据捕获处理流程 圈一圜一圈 圈一圆 圈 图一园 图3
网络性能数据块访问流程 软件设计开发 计算机光盘软件与应用 Computer CD Software and Applications 2012年第1期 (四)数据包捕获与分析模块。功能实现说明:该功能模块 主要由封装的CSockSupport,CsockHelper,cpackInterDlg, CbinDataDlg四个类完成,下面将对这些类进行详细说明。 CsockSupport类:主要负责检查Socket是否支持2.0版本, 在该类中封装了WSAStartup完成Socket的启动: CsockHelper类:主要实现了从获取本机信息结构、Socket 创建、绑定、设置、启动线程、数据接收到协议分析的全部方法, 详细处理流程见图4所示。 GetLocalIP实现获取本机地址操作的方法,LPHOSTENT lphp 是定义一个主机信息结构,获取过程由gethostname(szLocname, MAXHOSTNAMELAN)与 目 图4 CSockHeIper类处理流程 gethostbyname(szLocname)完成;第一个参数是用于放置 本机名称的缓冲,第二个参数是缓冲区长度,最后利用inet ntoa 将IP地址转化为“.”式地址。 1.流量获取模块。设计思路:实际编程时,可以利用Windows 系统内提供的性能接口,只用访问此接口就可获得网络性能相关 的数据,例如流量、IP等;根据这个设想,设计出了本模块的子 功能如下: 访问性能数据子模块:通过对注册表进行访问来获得流量数 据信息; 显示子模块:将数据绘制在窗口中显示出来; 框架子模块:处理消息映射及消息处理等; 2.数据统计模块。可利用微软API函数来实现对IP的统计分 析,系统管理员通过数据统计可以在及时发现网络性能瓶颈。涉 及到的函数有Getudpstatistic,需要注意的是工程中要加载 IPHelpapi.1ib库。函数调用结果通过列表可以直观显示出来, 网络管理人员可以通过其中统计数量的变化监视网络性能。 辩辩灞 磷豫拣 }群嚣 赫 嗨{9 粒张l捋自‰辅搏螭时 l } 一 糍辩蕊一鸯 彝潮 鳓《辑磷姆蔫簿壤辫 簿 聃 。 铋” 。 罐 《 错磷 蘸龋酶褥麟 釉 j嚣审秘鞲骧精囊 瓣 瓣 薅螓婚罐 《婀鼋睡黟 0 # 辑 }僭霹 谴: 赣惫 瓤 商 t”辫靠 糕弛弹簿辩搿 鞠鞲鞲糍罐盘; 衡 琏 臻霹罐§ 趣舔;墓帮嚣麟 穗媾毓辣摹}≥瓣熬 糍 { ”} 瓣 lt% 0 端 瓣 赫 #甜 ;帮搿 i t … , , 一,,~ 潞挺 蚌憾蠹 r 蔫§ 臻§ 辨 端簿 魏 _l ¨| 图5 统计模块界面 三、结束语 互联网的迅猛发展,流量检测和统计分析成为整个网络安全 管理系统的基础部分。网络管理员可以根据数据流量的变化规律, 发现网络故障与攻击行为,及时采取措施,减少损失。 网络流量分析系统是一个比较复杂的系统,由于时间关系, 本设计只完成了大概框架,通过编写套接字、访问注册表等方法 实现了部分主要功能,并没有完全完成详细指标,比如只提供了 局域网内流量实时监测、数据包解析、简单统计等功能,这些都 有待于进一步改进、深入与完善,下一步工作的重点将是提供更 多监控功能,对网络行为进行更深入的分析。 在整个设计过程中,重点放在了数据捕获与流量实时监控两 个功能上,进而描述了采用套接字开发流量监控系统中的思路和 关键事项,阐述了开发过程中碰到的一些技术问题,对功能需求 与细节实现进行了详细分析与设计。 通过这次开发过程,提高了我独立地分析、解决问题的能力, 而且掌握了从需求分析、整体设计、详细设计到代码实现的软件 开发流程,使我对软件工程中的理论有了更深入的认识。 参考文献: 『1]陈伯成,范闽,李英杰利用网络监听维护子网系统安全的一 种方法m.计算机工程与应用,2000,(10):133-135 『2]李凌.Winsock网络编程实用教程【M】.北京:清华大学出版 社.2003.1 1:9—35 『3]曹衍龙,刘海英.Visual c++网络通信编程实用案例精选(第 二版)rMI.北京:人民邮电出版社,2006.5:425—437 『41孙贤淑.IP网络流量测量的研究与应用『D】.北京:北京邮电 大学【硕士论文】,2005 (上接第1 58页) 是要对系统用户的用户口令进行加密,在经费预算系统中使用了 散列加密算法对密码的进行加密,散列加密存储的密码是原来数 据的数字指纹,而不是数据本身,也就是说,你没有办法倒转加 密过程来获取原来的数据,你只能对新的数据进行散列然后进行 比较,以验证用户的合法性。在ASP.NET平台下实现对数据的散 列加密很容易,用ASP.NET安全模型下的HashPassword For storinglnconfi ile方法即可实现。其次,可以对整个数据库 中的数据使用SQL Server 2008中的透明数据加密(TDE)方式来 进行保护。TDE对数据库文件和日志文件进行保护,对系统而言 没有什么改变,数据进行数据库写操作时,数据库系统会先将数 据加密后再写到数据库文件之中,而进行读操作时,数据库系统 也会将用户所需的数据解密后再返回给用户。通过以上两种方式, 有力地保护了系统数据的安全。 另外,经费预算系统的数据库管理系统是SQL Server 2008。 使用了ADO.NET中的SQL Server.NET数据提供程序实现对系统数 据库的操纵,在对数据的操作中又使用了存储过程技术。这样, 就避免了用户直接访问数据库表与“SQL注入攻击”。 四、结束语 本文对基于B/S架构、ASP.NET平台的经费预算系统的网络 安全设计进行了讨论。由于经费预算系统运行于复杂的网络环境, 处理的数据敏感。因此,在安全设计上,既要考虑系统访问的合 法性,又要考虑数据访问的安全性。针对相关的安全问题,本文 给出了基于ASP.NET的解决方案。 参考文献: 【1]兰静.ASP.NET数据库访问技术卟内蒙古电大学 刊,2005(09) 【2]汪捷,杨宗凯,吴砥..NET技术在管理信息系统开发中的应 用Ⅱ】.微机发展,2004(1 1) f315r4爽埸瑁,聂笃宪,张世雄刑用ASP.NET中ADO.NET技 术实现数据库的动态访问卟电脑知识与技术,2005(20) [4】徐岩柏.ASP.NET数据库访问技术U].中国科技信 息,2009(1 1)