




已阅读5页,还剩55页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
目 录第一章 网络监控系统简介11.1 网络监控系统的基本组成11.2 网络监控的作用和意义1第二章 网络监控系统的基本原理22.1 简介Internet与Tcp/Ip协议22.1.1 Internet基础22.1.2 TCP/IP协议32.2 MFC简介42.3 Winsock 2 SPI介绍72.4 Winsock 编程要点9第三章 网络监控系统的设计113.1 系统设计要求113.2 系统功能划分113.3 系统工作原理123.4 系统结构143.5 系统部署143.6 系统功能实现143.7 关键技术153.8 系统性能及安全性分析18第四章 程序运行结果及分析204.1 客户机运行界面以及监控结果分析204.2 服务器运行界面以及监控结果分析24总结25致谢26参考文献27附 录28581 网络监控系统简介不加粗随着Internet在世界范围内的发展和普及,网络已成为信息存储和传送的最大平台。考虑到网络信息的日益复杂庞大和多样混杂性等特点,网络监控问题就越发显得重要,本系统通过对当前网络的查询与监控,即对进出网络的数据资源进行控制,依照过滤规则将不符合规则的信息包过滤掉,从而有效的对内部网络实施保护,以求在获得安全性的同时,提高网络性能。1.1 网络监控系统的基本组成本系统由两大部分组成,一部分用于网络监听和数据包截取、分析功能的实现,另一部分用于与用户交互功能的实现。为了使本系统结构清晰,便于调试,易于实现,系统设计部分采用了软件工程学的模块设计思想,将整个系统按功能划分为几个主要功能模块,在每个主要功能模块内部又按功能细划分为若干个子功能模块,然后按“自顶向下、逐步求精”的方法逐一实现,完成全部设计。整个系统划分为四大功能模块:数据包截取功能模块、数据包分析功能模块、控制管理功能模块和用户交互功能模块。1.2 网络监控的作用和意义网络世界是一个虚拟、自由的空间,但是过度的没有约束的自由,就会走向极端,给使用者和社会造成恶果。于是如何对网络上海量的鱼龙混杂的信息以及网络的使用情况进行有效监控就显得非常必要。网络监控实际上是网络管理的一项重要内容。网络管理就是通过某种方式对网络状态进行监控,使网络能正常、高效地运行。网络管理中监控对象一般为所有支持IETF标准的SNMP协议的网络设备,包括路由器、交换机等,并提供网络设备平台的的相关信息,因此可以从宏观上完成网络管理的五大功能 性能管理、配置管理、故障管理、计费管理、安全管理。由于可监控的内容是由网络设备制造厂家已经定好的,因此无法对网络进行更细致的监控,比如对各种网络服务(HTTP, SMTP, POP3, FTP, DNS, TELNET等)进行监控。另外从网络安全角度来看,比如防火墙系统,由于内外网间通信的每一个包都要经过它并经分析之后才决定能否通过,因此防火墙完全有能力对内外网间的通信情况进行非常细致的监控。但防火墙的这种工作方式却不可避免地对网络性能存在一定的影响。它的主要意义在于实现了网络监控。随着内部网络的规模与容量的日渐扩大,保持系统的正常运作将会变得越来越重要。网络监控能使系统及时地发现网络流量异常的现象,使服务器在发现非法入侵后能立即做出反应,来保护自己的服务器不被破坏,以求获得安全性的同时,提高网络性能。本论文设计和实现了一种基于网络监听和协议分析技术的网络监控系统。相对与基于应用层协议SNMP的网络监控来说,由于本方案的网络监控工作在网络的更底层数据链路层,所以可监视的内容将更加丰富、控制也更细致灵活;相对于网关式的防火墙等,本方案是基于旁路监听模式的,对网络的正常使用毫无影响。第二章 网络监控系统的基本原理实现网络监控,必须掌握Internet和TCP/IP协议的基础知识,熟悉编程的相关内容。进行数据报截取,还要了解Winsock 2 SPI相关应用。本系统用VC+作为开发工具,Visual C+ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它可以充分利用具有面向对象特性的C+ 来开发出专业级的 Windows 应用程序。为了能充分利用这些特性,必须掌握 Microsoft 基本类库 (MFC) 的层次结构。该层次结构包容了 Windows API 中的用户界面部分,能够很容易地以面向对象的方式建立 Windows 应用程序。2.1 简介Internet与Tcp/Ip协议2.1.1 Internet基础80年代以来,随着计算机技术的发展和完善,特别是PC的出现,全世界越来越多的计算机采用各种通信媒体相互进行连接,这就是所谓的Internet。Internet是目前国际上最大的异构互联广域网和最大的信息集散地,采用TCP/IP协议和其他统一的标准,将世界各地业已存在的大量局域、广域网络连接起来,形成一个巨大的网中之网,将全球联系起来,实现了世界范围内的信息、资源和服务共享,极大地扩展了计算机网络应用的外延和内涵。通过网络,我们可以和其他连到网络上的用户一起共享网络资源,如磁盘上的文件及打印机、调制解调器等,也可以和他们互相交换数据信息。 图2-1 现代人交换信息图应用层运输层网络层表示层会话层数据链路层物理层7654321应用层网络接口层网际层 IP (各种应用层协议如TELNET, FTP, SMTP 等)运输层(TCP 或 UDP)无连接分组交付服务运输服务 (可靠或不可靠)各种应用服务OSI 的体系结构TCP/IP 的体系结构TCP/IP 的三个服务层次图2-2 OSI及TCP/IP体系结构图2.1.2 TCP/IP协议TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是Internet中计算机之间进行通信的标准,其命名源于最重要的两个协议TCP和IP。任何关于Internet协议的讨论必须有TCP/IP开始,它是其他所有协议的基础。TCP/IP是Internet网络的共同语言,主机之间必须利用TCP/IP互通信息。TCP/IP协议是一组不同层次上的多个协议的组合。TCP/IP通常被认为是一个四层协议系统,每一层负责不同的功能: 1.链路层,有时也称作数据链路层或网络接口层,通常包括操作系统中的设备驱动程序和计算机中对应的网络接口卡。它们一起处理与电缆(或其他任何传输媒介)的物理接口细节。 2.网络层,有时也称作互连网层,处理分组在网络中的活动,例如分组的路由选择。在TCP/IP协议组件中,网络层协议包括IP协议(网际协议),ICMP协议(Internet互连网控制报文协议),以及IGMP协议(Internet组管理协议)。3.运输层,主要为两台主机上的应用程序提供端到端的通信。在TCP/IP协议组件中,有两个互不相同的传输协议:TCP(传输控制协议)和UDP(用户数据报协议)。 TCP为两台主机提供高可靠性的数据通信。它所做的工作包括把应用程序交给它的数据分成合适的小块交给下面的网络层,确认接收到的分组,设置发送最后确认分组的超时时钟等。由于运输层提供了高可靠性的端到端的通信,因此应用层可以忽略所有这些细节。UDP则为应用层提供一种非常简单的服务。它只是把称作数据报的分组从一台主机发送到另一台主机,但并不保证该数据报能到达另一端。任何必需的可靠性必须由应用层来提供。4.应用层负责处理特定的应用程序细节。几乎各种不同的TCP/IP实现都会提供下面这些通用的应用程序: Telnet 远程登录 FTP 文件传输协议 SMTP 用于电子邮件的简单邮件传输协议SNMP 简单网络管理协议IP协议IP是Internet通信的底层协议,负责在网络中寻址和传送数据报。它是Internet上的最主要协议,也是整个TCP/IP协议的灵魂。其他协议都必须依靠IP传输数据。无论数据的最终目的为何,所有流入流出数据都需要使用IP。1.IP的功能在网络存取层及端对端传输层之间传递信息。进行数据报的拆解与重组。将数据报传送到目标主机。2IP地址 TCP/IP网上的计算设备或主机(也称为节点)都分配有一个唯一的地址,叫做IP地址。IP地址属于三层逻辑地址,用来标识TCP/IP网络中的每一台设备,采用分成结构,32位,共4个8位组,采用网络位+主机位的形式。 表2-1 IP地址分类地址类型引导位网络位地址范围地址结构主机位可用地址数A类01 -126网+主+主+主16777214B类10128-191网+网+主+主65534C类110192-223网+网+网+主254D类1110224-239组播地址E类1111240-研究用地址127.X.X.X用于本地回送测试IP网络地址由NIC统一分配,以保证IP地址的唯一性 端口号应用层的每种服务都有一个唯一的端口号,例如Telnet的端口号为23。当TCP或UDP由IP收到数据后,会根据标头的端口号将数据转交给对应的程序处理。需要注意的是,TCP和UDP的应用程序可分配相同的端口号,必须配合端口号和传输协议种类才可以决定数据对应的程序。 知名的端口号: 表2-2 知名端口号FTPTELNETSMTPDNSTFTPSNMPNAME2123255369161 42端口号0到255已经保留给著名的服务,256到1023则分配给UNIX特有的服务。2.2 MFC简介MFC是一个用来构造Win32应用程序的C+类库。该库的主要优点是效率高。它减少了大量在建立 Windows 程序时必须编写的代码。同时它还提供了所有一般 C+ 编程的优点,例如继承和封装。MFC 是可移植的,例如,在 Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。MFC对Win32 API进行了封装,用C+结构把Win32函数和数据类型封装起来。另外,MFC还含有大量像WinMain()函数一样的许多函数都需要的标准代码,使用户可以不用自己提供代码。MFC封装类中最重要的是CWnd,它包含了Win32 API中绝大多数的窗口功能。使用CWnd类的最大的好处是创建和操作窗口的简易性。使用Win32 API在C语言中创建一个窗口需要用到大量的数据结构和调用几个相关函数。MFC通过允许用户实例化一个CWnd对象和调用几个成员函数而简化了这些工作。这种使用C数据结构对象和全局函数的简单性适用于整个MFC库。MFC还简化和改进了应用程序响应消息的方式。把消息映射到成员函数中,同时编写一个成员函数来处理一个具体的消息,而不是编写一个庞大Switch语句的窗口过程,是代码更简洁。基础类库MFC的核心是以C+形式封装了大部分的Windows API。类库表示窗口、对话框、设备上下文、公共GDI对象(如画笔、调色板、控制框)和其他标准的Windows部件。这些类提供了一个面向Windows中结构的简单的C+成员函数的接口。MFC可分为两个主要部分:基础类、宏和全程函数。基础类中包括基类、应用程序框架类、应用程序类、命令相关类、文档/视类、线程类、可视对象类、窗口类、视类、对话框类、属性表、控制类、菜单类、通用类、其他支持类、OLE基类、数据库类等等,在这里不一一列举。宏和全程函数:若某个函数或变量不是某个类的一个成员,那么它是一个全程函数或变量。Microsoft基本宏和全程函数提供以下功能:数据类型;运行时刻对象类型服务;诊断服务;异常处理;Cstring格式化及信息框显示;消息映射;应用消息和管理;对象连接和嵌入(OLE)服务;标准命令和Windows Ids。常见的全程函数和宏有:AfxGetApp,AfxGetMainWnd,AfxMessageBox,DEBUG_NEW等。从继承关系来看,又可将MFC中的类分成两大类:大多数的MFC类是从CObject继承下来;另外一些类则不是从CObject类继承下来,这些类包括:字符串类CString,日期时间类CTime,矩形类CRect,点类CPoint等,它们提供程序辅助功能。MFC中大部分类是从CObject继承下来的,CObject类描述了几乎所有的MFC中其他类的一些公共特性。CObject类为派生类提供下述服务:1.对象诊断输出对象内部信息:CDumpContext类与CObject的成员函数Dump配合,用于在调试程序时输出对象内部数据。对象有效性检查:重载基类的AssertValid成员函数,可以为派生类的对象提供有效性检查。2.运行时访问类的信息MFC提供了一个非常有用的特性,它可以进行运行时的类型检查。3.对象持续性通过与非CObject派生的档案类CArchive相结合,提供将多个不同对象以二进制形式保存到磁盘文件(Serilization)中以及根据磁盘文件中的对象状态数据在内存中重建对象(Deserilization)的功能。CObject类的定义如下:class CObjectpublic:/ 与动态创建相关的函数 virtual CRuntimeClass* GetRuntimeClass() const;析构函数virtual CObject(); / virtual destructors are necessary/ 与构造函数相关的内存分配函数,可以用于DEBUG下输出诊断信息 void* PASCAL operator new(size_t nSize);void* PASCAL operator new(size_t, void* p);void PASCAL operator delete (void* p);#if defined (_DEBUG) & !defined (_AFX_NO_DEBUG_CRT)void* PASCAL operator new (size_t nSize, LPCSTR lpszFileName, int nLine);#endif/ 缺省情况下,复制构造函数和赋值构造函数是不可用的 / 如果程序员通过传值或者赋值来传递对象,将得到一个编译错误 protected:/ 缺省构造函数 CObject();private:/ 复制构造函数,私有 CObject(const CObject& objectSrc); / no implementation/ 赋值构造函数,私有 void operator=(const CObject& objectSrc); / no implementation/ Attributespublic:/ 与运行时类信息、串行化相关的函数 BOOL IsSerializable() const;BOOL IsKindOf(const CRuntimeClass* pClass) const;/ Overridablesvirtual void Serialize(CArchive& ar);/ 诊断函数 virtual void AssertValid() const;virtual void Dump (CDumpContext& dc) const;/ Implementationpublic:/ 与动态创建对象相关的函数 static const AFX_DATA CRuntimeClass classCObject;#ifdef _AFXDLLstatic CRuntimeClass* PASCAL _GetBaseClass();#endif;2.3 Winsock 2 SPI介绍Winsock 2 是一个接口,而不是协议,所以它可以用于发现和使用任意数量的底层传输协议所提供的通信能力。起初的Winsock是围绕着TCP/IP协议运行的,但是在Winsock 2中却增加了对更多传输协议的支持。Winsock 2不仅提供了一个供应用程序访问网络服务的Windows socket应用程序编程接口(API),还包含了由传输服务提供者和名字解析服务提供者实现的Winsock服务提供者接口(SPI)和ws2_32.dll。 Winsock 2的传输服务提供者是以动态链接库的形式(DLL)存在的,它是通过WSPStartup函数为上层函数提供接口,而其他的传输服务提供者函数则是通过分配表的方式来访问WS2_32.DLL。传输服务提供者的动态链接库只有在应用程序需要时才由Ws2_32.dll来装入内存中的,在不需要时则会被自动卸载。以下是Winsock 2在传输服务提供者上的WOSA(Windows开放服务结构): - |Windows socket 2 应用程序| -Windows socket 2 API | WS2_32.DLL | -Windows socket 2 传输SPI | 传输服务提供者(DLL) | - Windows socket SPI在服务提供者中使用了以下的函数前缀命名方式:WSP(Windows socket服务提供者),WPU(Windows socket提供者向上调用),WSC(Windows socket配置)。每一个传输服务提供者都有它自己所支持的传输协议,它是使用WSAPROTOCOL_INFOW结构来实现的。传输服务提供者把所有的相关信息都存放在这个结构中,而应用程序就是通过这个结构的内容来将自己和相应的传输服务提供者相关联。 Windows socket SPI提供三种协议:分层协议,基础协议和协议链。分层协议是在基础协议的上层,依靠底层基础协议实现更高级的通信服务。基础协议是能够独立,安全地和远程端点实现数据通信的协议,它是相对与分层协议而言的。协议链是将一系列的基础协议和分层协议按特点的顺序连接在一起的链状结构,请参见下图: API- | WS2_32.DLL | SPI- | 分层协议 | SPI- | 分层协议 | SPI- | 基础协议 | - Ws2_32.dll数据传输部分的主要功能是在服务提供者和应用程序之间提供流量管理的功能。每个应用程序通过Ws2_32.dll和相应的服务提供者进行严格的数据交换。Ws2_32.dll根据应用程序在创建套接字时所提供的参数来选择特定的服务提供者,然后把应用程序的实现过程转发由所选创建套接字的服务提供者来管理。也就是说,Ws2_32.dll只是一个中间过程,而应用程序只是一个接口,数据通信的实现却是由服务提供者来完成的。我们说过,Ws2_32.dll是通过创建套接字的API函数WSASocket或socket的参数来确定使用哪一个服务提供者。而WSASocket/socket的参数中包括了地址族,套接字类型和协议类型,这三个因素共同决定了创建套接字的服务提供者。Ws2_32.dll在服务提供者中寻找第一个和前面三因素相匹配的WSAPROTOCOL_INFOW结构,然后就调用这个WSAPROTOCOL_INFOW结构相应的WSPStartup函数,(所有的数据传输服务提供者以DLL的形式,它们对外的接口就只有WSPStartup,其他的服务提供者函数都是通过WSPStartup来调用的),进而调用如WSPSocket的函数来创建套接字,WSPConnect的函数来建立连接等等。除了流量管理功能外,Ws2_32.dll还提供了其他的服务,比如协议枚举,基于线程的阻塞钩子管理和在Ws2_32.dll和服务提供者之间进行版本协商。 传输服务提供者实现的功能包括建立连接,传输数据,实现流量控制和差错控制等函数。其实Ws2_32.dll并不知道服务提供者的请求等活动是如何实现了,Ws2_32.dll在应用程序和服务提供者之间实现了媒介的功能。传输服务提供者可分为两类:套接字描述符是可安装的文件系统(IFS)句柄的提供者;剩下的是非IFS的提供者。服务提供者实现了底层的与网络相关的协议。Ws2_32.dll提供了介质级别的流量管理,应用程序则提供了有关如何实现网络相关的操作,它实现了用户所希望的功能。 在传输服务提供者的实现过程中,安装顺序是非常重要的。我们不仅要正确的安装服务提供者,而且还必须在Windows socket中注册,将相关的系统信息保存在数据库中,这样Ws2_32.dll才能够方便的获得下层服务提供者的相关信息。在Ws2_32.dll中提供了用来安装服务提供者的函数WSCInstallProvider,它需要服务提供者的有关数据,比如DLL的名称和路径。同时Ws2_32.dll还提供了卸载服务提供者的函数WSCDeinstallProvider,在不需要时通过它将特定的服务提供者从系统中删除。为什么说传输服务者的安装顺序很重要呢?在服务提供者配置函数中的WSCEnumProtocols是用来枚举系统中所有已安装的服务提供者,它按照服务提供者的安装顺序相应的列出他们。在前面也提到过,Ws2_32.dll在服务提供者中按安装顺序搜寻和WSASocket/socket提供的三个参数相匹配的服务提供者,所以安装顺序在一定程度上是决定了服务提供者是否被正确调用的关键。Windows socket 2还提供了一个动态链接库Sporder.dll,它提供了对已安装的所有服务提供者顺序的重新排列。 服务提供者系统中区分基础协议,分层协议和协议链是通过结构WSAPROTOCOL_INFOW中的Protocolchain结构的ChainLen值来实现的。分层协议的ChainLen值为0,基础协议的值为1,而协议链的值是大于1。在数据传输服务提供者的实现方式中分层协议和基础协议几乎是相同的,它们的不同之处在安装上。Windows中,现有的系统服务提供者(系统自带)几乎已提供了所有基本的服务,因此我们所写的服务提供者程序,都可以对数据报进行适当“修饰”后调用系统服务提供者来完成绝大部分剩下的功能,无论是基础服务提供者还是分层服务提供者都可以使用这种技术,免去不必要的劳动。基础服务提供者的实现过程主要是替换当前系统服务提供者的安装路径为自己的服务提供者的安装路径即可,当然我们必须保存所有系统服务者的相关数据,在我们卸载自己的服务提供者还原系统服务提供者时要用到这些信息,如系统服务者DLL的名称和路径。而协议链就不同了,首先我们必须安装好所有的基础协议和分层协议后,再构造协议链的WSAPROTOCOL_INFOW结构链,组成协议链的每个协议都会在协议链的ProtocolChain.ChainEntries数组中被定义,协议链数组中的第一个协议应该是第一个分层服务提供者。当然在安装分层协议及协议链时我们不会改变系统服务提供者,最多只是改变系统服务提供者的安装顺序罢了。在此,我们以分层服务提供者为例来说明数据传输服务提供者的安装过程。 Ws2_32.dll是使用标准的动态链接库来加载服务提供者接口的DLL到系统中去的,并调用WSPStartup来初始化。WSPStartup是Windows Socket 2应用程序调用SPI程序的初始化函数,也就是入口函数。WSPStartup的参数LPWSAPROTOCOL_INFOW指针提供应用程序所期望的协议信息,然后通过这个结构指针我们可以获得所保存的系统服务提供者的DLL名称和路径,加载系统服务提供者后查找到系统SPI程序的WSPStartup函数的指针,通过这个指针我们就可以将自己服务提供者的WSPStartup函数和系统SPI程序的WSPStartup函数相关联,进而调用系统的各个服务提供者函数。2.4 Winsock 编程要点Winsock控件是一个专门用于Windows网络编程,与Sockets完全兼容的ActiveX控件,它提供了访问 TCP 和 UDP 网络服务的方便途径。网络编程中最常用的是客户机/服务器模型,但是点对点通信模式编程更简单,适合传输数据流少的场合,如控制测量等方面。本文提出了在VC+中用Winsock控件实现Internet中按照二进制数据格式点对点通信的一种常见的方案。Windows Sockets接口是TCP/IP网络最为通用API,已成为Windows网络编程的事实上的标准。它以Unix中流行的Socket接口为范例定义了一套Microsoft Windows下网络编程接口函数库。它不仅包含了人们所熟悉的Berkeley Socket风格的库函数;也包含了一组针对Windows的扩展库函数,以使程序员能充分地利用Windows消息驱动机制进行编程。Socket实际在计算机中提供了一个通信端口,应用程序在网络上传输,接收的信息都通过这个Socket接口来实现。在应用开发中就像使用文件句柄一样,可以对Socket句柄进行读,写操作。MicroSoft在Sockets API库的基础上创建了WinSock控件,专门用于Windows接口,与Sockets完全兼容。,利用 WinSock 控件可以与远程计算机建立连接,Winsock包含有用户数据文报协议 (UDP)和传输控制协议 (TCP)。Winsock控件对用户来说是不可见的,它提供了访问 TCP 和 UDP 网络服务的方便途径。Winsock控件封装了烦琐的技术细节,编写网络应用程序时,不必了解 TCP/IP的细节或调用低级的 Winsock APIs。通过设置控件的属性并调用其方法就可轻易连接到一台远程机器上去,并且还可双向交换数据。下面列出有关Winsock控件的属性,方法和事件。属性:LocalIP:本地的IP地址。LocalPort:所用到的本地端口;Protocol:TCP或UDP协议。RemoteHostIP:对方IP地址。RemotePort:对方数据通信的端口。 方法:Listen:用于服务器程序,等待客户访问。Bind:绑定IP地址和端口。Connect:向远程主机发出连接请求。Accept:接受一个连接请求。Senddata:发送数据。Getdata:取得接收到的数据。Close:关闭当前连接。 事件:DataArrival:新数据到达。ConnectionRequest:对方请求连接时接受连接请求。Error:后台处理中出现错误。.Close :对方关闭连接时出现。Winsock控件支持两种协议,TCP协议和UDP协议,都属于用TCP/IP协议。TCP(Transfer Control Protocol)是传输控制协议的简称,是基于连接的协议,在数据传输之前必须先建立连接,通信双方是基于客户/服务器模型,必须分别建立客户应用程序和服务器应用程序。UDP(用户数据文报协议)协议是一种无连接协议,通信双方之间的传输类似于传递邮件:消息从一方发送到另一方,但是两者之间没有明确的连接,通信双方是对等的,单次传输的最大数据量取决于具体的网络。利用Winsock控件创建双方的通信过程如下:基于TCP协议通信,需要分别建立客户应用程序和服务器应用程序。创建客户应用程序,就必须知道服务器的名或 IP 地址(RemoteHost 属性)和进行“侦听”的端口(RemotePort 属性),然后调用 Connect 方法。 创建服务器应用程序,就应设置一个收听端口(LocalPort 属性)并调用 Listen 方法。当客户机要连接时会发生 ConnectionRequest 事件。为了完成连接,可调用ConnectionRequest 事件内的 Accept 方法。 建立连接后,任何一方都可以收发数据。为了发送数据,可调用 SendData 方法。当接收数据时会发生 DataArrival 事件。调用 DataArrival 事件内的 GetData 方法就可获取数据。基于UDP协议通信相对简单,为了传输数据,首先要设置双方的端口(RemotePort和LocalPort)属性,一般双方端口号一样,同时设置对方IP(RemoteHostIP)地址。这样通过调用SendData方法就可以发送信息,有数据到来触发DataArrival 事件,调用GetData方法接收已送来的信息。第三章 网络监控系统的设计3.1 系统设计要求一个成功的网络监控系统至少要满足以下五个主要功能和性能方面的1实时性要求:监控系统的目的不仅仅是监视流经网络的各种信自、必要的时候必须具有一定的实时控制功能。比如如果监视到有不健康的信息或者对网络有危害的行为,那么除了写入日志系统外还应该实 时 地 阻止这些信息和行为。也就是说应该把不该发生的扼杀在萌芽状态而不是等待它发生后去亡羊补牢。2高扩展性要求:需要监控的内容可能随着实际情况的变化而发生的变化,这就要求有一种机制,保证能在需求发生变化时无需更改系统结构而容易地增加或删除功能以满足实际需求。3可适应性要求:这里的可适应性包括了对硬件与对软件两方面。不同单位的网络结构不尽相同,即使是同一单位的网络结构也可能随着实际而变化,一个成功的网络监控系统应该无须进行任何修改而适应这种变化;另外,这个系统还应该能够对它赖以运行的软硬件环境尽可能地独立。4安全性要求:前面讲网络监听时已提到过,监控系统本身具有两面性, 在 网 管人员手中,它是发现网络故障、保证网络安全运行的利器;可一旦被Hacker利用将使网络上的所有信息都暴露无遗,可能会给 网 络 用户带来无法估量的损失。所以这里的安全除了程序本身的安全之外还存在使用上的安全问题。5性能上的要求:性能在任何时候都是第一位的,牺牲性能换取功能是没有意义的,即系统本身不能对网络的性能产生影响,同时网络监控系统的存在对用户应该是透明的。3.2 系统功能划分依据以上原则,一个网络监控系统至少应该具备以下功能:1实时的网络通信监视,图形化的网络传输状态显示,并且可以自定义各种过 滤规则。2灵活而功能强大的访问控制基于MAC地址、基于IP地址、基于端口(高 层协议),这是所有控制功能的基础;3各种高层协议的协议分析以及基于高层协议的过滤功能基于协议头部 信 息的过滤、基于数据的内容过滤;4日志记录,可以记录实时监视到的内容或者已实施的实时控制内容以及各种 恶意的非授权的网络行为;5网络流量统计,通过基于高层协议类型(也即端口号)的流量统计可以知道网络的使用情况,通过基于内部IP的流量统计可以知道网络内每个用户的大致网络使用量,需要的时候可以用于网络计费;6通过对日志记录的分析可以收集到外部网络对内部网络的攻击证据、内部网络用户的非法行为(比如端口扫描)和非授权行为(比如私设代理服务器)的证据等等;7网络故障发现、分析、处理以及简单的网络管理功能。网络监控系统的完整功能图如下:网络监控系统实时监控实时控制日志记录日志分析基于MAC的数据传输基于IP的数据传输基于高层协议的数据传输访问控制HTTP的过滤Mail的过滤实时监控到的内容已实施的实时控制内容各种证据的收集流量统计分析各种非法使用的行为图3-1 网络监控系统的功能分析图3.3 系统工作原理1、两种基本模型在旁路监听模型中,一个网络监控设备处于内/外网络中间,但是却独立于两者。内/外网络通讯的所有数据都被网络监视器接受到,然后就可以进行分析、判断、统计等必要的操作。该模型最大的优点是不会对网络正常通讯产生任何影响,所有的数据传输就如同没有该监视系统一样正常进行,所以它的网络性能是最好的,但是它的缺点是不太易于控制。本论文中使用了这种模型并利用RST标志切断连接的方法很好地解决了控制的问题。在过滤模型中,一个过滤器存在于内/外网络之间,可以被认为是联接内部网络和外部网络的透明网关。与旁路监听模型相同的是,内/外网络通讯的所有数据都被过滤器接受,所以过滤器可以实现网络监控的所有功能;并且由于内/外网络不能直接通讯,而必须通过过滤器转发,所以过滤器就可以对网络通讯进行控制,允许或者禁止内/外节点之间的互访。但是由于数据被过滤器首先缓存下来,然后进行分析,最后转发出去,不可避免会影响网络性能,从而形成一个网络瓶颈。本文使用的是旁路监听模式,下面将针对这种模型的工作原理分析。2、基本工作原理网络监控系统主要是通过捕获网络上的链路层数据报,再分析其内容,而检测资料传输是否属于恶意行为或恶意的使用以及实现对网络的状态、据流动情况的检测,并及时做出相应的响应以实现实时的控制。要实施网络监控,就需要收集网络中不同节点的通讯信息。关注网络边界的情况很重要,但网络内部的通讯也不容忽视,特别是当内部网的主机提供未经授权的服务时。收集网络中的通讯数据时,要着重明确一点:只收集有用的信息,且信息量要尽可能的得少。但是在实际应用中,除非网络通讯量很小,一般情况下,应尽量保存每个信息包的头部和主体内容以作为制定对策的参考资料。另外,可以只对信息包的部分字符做抽样特征之简单分析,而丢弃掉信息包的有效载荷;然后,再对需要进一步调查的服务或主机的详细资料进行收集汇总。在大多数网络环境中,通常主要关注三种协议的通讯信息:TCP,UDP和ICMP。这三种协议的最基本要素包括:. 源IP地址和目标IP地址;. 对于TCP或UDP协议,还有源端口和目标端口;. 对于ICMP协议,包括来自目标位置的未抵达信息(ICMP类型3)。这将有助于鉴 别那些攻击未遂或因通信堵塞的入侵企图。可以按照一定的周期去收集这些协议通信量,可能是几分钟、几小时甚至几天,这完全取决于需要调查的通讯量要求。收集工作是相对耗费资源的,因此一般先收集一些小的样本,然后根据资源限定条件再收集更多的样本。通过观察TCP连接情况,可以看到允许通过的通讯内容。另外,还要重视未成功连接所蕴含的有价值信息。通过捕获TCP信息包数据从而分析连接失败的原因,并检查来自目标地点的ICMP未抵达信息,就能够为通讯分析提供额外的有价值数据。通常需要考虑四种不同类型的TCP活动行为:. 成功连接:就是指三次握手成功完成;. 失败连接:客户对连接请求没有回应,客户通常在间隔很短的时间内重试两 、 三次;. 阻断连接(Blockedc onnection):客户对连接请求进行否定,如TCP,RST信息 包、ICMP未抵达主机或端口信息包;. 中止连接Abortedc onnection):三次握手已经开始但因客户拥挤或网络连 接丢失等原因而未能完成。一旦收集到了一段时间内网络上某个特殊位置的信息,就可以对这些数据进行通讯分析。通讯分析有几种不同的方法可以选择,其中一种是将UDP连接、TCP连接和连接企图单独分为三个组:. 外部客户机和内部服务器。大多数情况下,源地址和源端口是不相关的,所有需要进行初始检查的是目标地址和目标端口。. 内部客户机和内部服务器。虽然检测重点放在目标地址和目标端口上 ,但是 源地址也相当重要,不容忽视。. 内部客户机和外部服务器。如果对到外部的连接不加限制,可以忽略这种数据。否则,就需要特别关注目标端口的情况。除了ICMP信息包的目标地址应与TCP客户机地址划为一组外,ICMP的其他通讯信息通常应归为以上各类的同一组中。每个组中,通过按服务器端口或服务器地址加服务器端口对TCP信息进行分类,就可以看出哪些服务正在运行以及运行的服务器类别。一旦确定出现了可疑的或未授权的行为或者违法的不健康的信息,就应该根据通讯分析的结果去更改本系统的访问控制规则或进行相应的日志记录或通知系统管理员或配合防火墙、入侵检测系统等做出相应的控制。3.4 系统结构本监控系统主要由以下几个模块组成:. 链路层数据报捕获模块,这是整个系统的基础,主要负责从数据链路层按照 过滤规则捕获所有的数据报;. 协议分析模块,对捕获的链路层数据报从下往上逐层进行协议分析,直到得 到需要的信息;. 数据分析模块,协议分析模块主要是分析协议头,而数据分析主要是分析一个数据报中除去协议头外的数据部分,对基于内容的监控、过滤等这是必须的;. 网络控制模块,一旦通过协议分析或数据分析发现了非法或恶意的网络使用,那么仅仅进行日志记录是不够的,还应该及时切断这种连接或者通知管理员或者与其它网络安全系统配合(比如修改防火墙的ACL等)以阻止这种行为的继续;. 显示模块,把各种情况以直观形象的方式显示给管理员。3.5 系统布局现实中不同的网络其拓扑结构、规模大小、性能要求等是不同的,所以一个灵活性较高的网络监控系统的部署也可能随着网络的不同而有不同的部署方法。这里讲的部署事实上就是一个监控点选择的问题,一般有以下几种模式。1、局域网的电脑通过HUB相连,这种情况最简单,监控机随便接在任何一个集线器的端口上就可以了。2、局域网的电脑通过非智能交换机(交换式HUB)相连,这时候需要人为地进行旁路设置,一般情况下利用一台HUB来实现。将网关设备(或者某台服务器,如果只是监控一台服务器的话)、内网交换机和监控系统都接在这台HUB上,这时候就转化成了模式。3、局域网的电脑通过智能交换机相连,且交换机支持端口镜像(带网管的交换机大多支持端口镜像),则只要将监控机跟网关设备或者网关电脑或者某台服务器,如果只准备监控该服务器的话)接在同一台交换机上,且将网关设备所占端口的所有通信镜像到监控机所接的端口就可以了。3.6 系统功能实现主程序流程图如图所示:开始解析命令行参数进行初始化是否运行在交互模式创建守护进程搜索网络内全部主机读入配置文件初始化交互窗口按照配置文件执行相应操作等待用户操作数据报分析处理是否退出结束否是执行相应操作否是否是是否有中断信号图3-2 主程序流程图3.7 关键技术下面针对前面提出的一个成功的网络监控系统必须具备的几个要求而详细谈一下在系统实现中用到的几个关键技术。1、利用RST标志切断连接的方法实现访问控制在基于包转发的过滤式(防火墙就是一例)系统中,访问控制是很容易实现的,只需要根据访问控制列表不转发相应的包即可。由于本系统为了不影响网络性能而采用了旁路式的结构,所以访问控制实现起来要相对困难一些,其基本原理就是利用RST标志切断连接。前面在协议分析部分已经讲了建立TCP连接和正常终止TCP连接的过程。建立连接的过程一般称为三次握手(three-way handshake),而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。既然一个TCP连接是全双工,因此每个方向必须单独进行关闭。这原则就是当一方完成它的数据发送任务后就能发送一个FIN来终止这个方向的连接,当一端收到一个FIN,它必须通知应用层另一端已经终止了那个方向的数据传送。首先进行关闭的一方(即发送第一个FIN)将执行主动关闭,而另一方(收到这个FIN)执行被动关闭。上面讲的一方发送FIN是终止一个连接的正常方式,也称为有序释放(orderly release),但也有可能发送一个复位(RST)报文段而不是FIN来中途释放一个连接,有时这称为异常释放(abortive release)。本系统正是通过这个原理来切断不希望的连接从而达到访问控制的目的。其过程如下:假设A给B发送了一个TCP报文(不论什么类型),C在中间抓获了这个包,那么C可以立即修正这个报文的TCP标志位,设置RST,简单修正TCP校验和,IP校验和、TCP序列号都不用改,从数据链路层上重新发出去,此时对端就被RST掉了。一个TCP连接只要一端RST掉了,另外一端马上也就断开了。退一步讲,可以在三次握手期间将TCP序列号加1并简单修正TCP校验和,只发送这种简单修正过的RST的报文即可确保立即切断TCP连接。总之,整个过程计算量很小,所以不用担心C发送的这个包没落在B的有效TCP序列号窗口内,B收到A的正常报文回送A之后,A才会发送下一个正常的报文,才会导致B的有效TCP序列号窗口继续滑动,而C发送的RST报文肯定在这个过程发生之前到达B。2、用Winsock控件实现点对点通信基于网络的远程控制和测量应用中,一般数据传输采用二进制格式,双机之间的连接方式是主丛式,构建一个测控网络,从机之间如果要交换数据也得通过主机。在网络测量控制等领域,通信双方需要传输的数据流量少,下位机一般是微控制器等嵌入式系统,数据处理能力较慢,通信双方也不必保持紧密联系,因此大多采用UDP协议,基于点对点的方式,双方通信的数据可靠性可以通过定义数据表示格式来保证。为了描述如何应用,我们在这里建立一个基于对话框的简单的点对点通信例子,说明在VC+中如何用Winsock控件实现二进制数据点对点通信。首先启动VC+,新建基于对话框项目工程,在控件箱中添加W
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 典当行股权债权转换与转让专项合同
- 水电站建设监理合同规范文本
- 智能制造企业股权合作分红及智能制造解决方案合同
- 污水处理厂污水泵站建设及设备租赁合同
- 智能交通枢纽土地使用权转让与交通管理合作代理合同
- 人类专业测试题及答案
- 电竞专业测试题及答案
- 学校机构工作总结
- 新媒体试用期转正工作总结
- 心病科副护士长工作汇报
- 医院宣传稿件写作方法
- 中药外敷的课件
- ECMO联合CRRT护理查房
- 医院安全生产检查台账
- 2025年中医《伤寒论》考试题库附答案
- 2025年全国企业员工全面质量管理知识竞赛试题及答案
- 轨道电路知识课件
- 2026届安徽省淮南市中考试题猜想语文试卷含解析
- 萨克斯课件教学课件
- GPR39mRNA在糖尿病大鼠组织中的表达特征及关联机制研究
- GB/T 23724.3-2025起重机检查第3部分:塔式起重机
评论
0/150
提交评论