网络进程监控系统的研究资料.docx
- 文档编号:11161415
- 上传时间:2023-02-25
- 格式:DOCX
- 页数:96
- 大小:351.46KB
网络进程监控系统的研究资料.docx
《网络进程监控系统的研究资料.docx》由会员分享,可在线阅读,更多相关《网络进程监控系统的研究资料.docx(96页珍藏版)》请在冰豆网上搜索。
网络进程监控系统的研究资料
1网络监控系统简介
随着Internet在世界范围内的发展和普及,网络已成为信息存储和传送的最大平台。
考虑到网络信息的日益复杂庞大和多样混杂性等特点,网络监控问题就越发显得重要,本系统通过对当前网络的查询与监控,即对进出网络的数据资源进行控制,依照过滤规则将不符合规则的信息包过滤掉,从而有效的对内部网络实施保护,以求在获得安全性的同时,提高网络性能。
1.1网络监控系统的基本组成
本系统由两大部分组成,一部分用于网络监听和数据包截取、分析功能的实现,另一部分用于与用户交互功能的实现。
为了使本系统结构清晰,便于调试,易于实现,系统设计部分采用了软件工程学的模块设计思想,将整个系统按功能划分为几个主要功能模块,在每个主要功能模块内部又按功能细划分为若干个子功能模块,然后按“自顶向下、逐步求精”的方法逐一实现,完成全部设计。
整个系统划分为四大功能模块:
数据包截取功能模块、数据包分析功能模块、控制管理功能模块和用户交互功能模块。
1.2网络监控的作用和意义
网络世界是一个虚拟、自由的空间,但是过度的没有约束的自由,就会走向极端,给使用者和社会造成恶果。
于是如何对网络上海量的鱼龙混杂的信息以及网络的使用情况进行有效监控就显得非常必要。
网络监控实际上是网络管理的一项重要内容。
网络管理就是通过某种方式对网络状态进行监控,使网络能正常、高效地运行。
网络管理中监控对象一般为所有支持IETF标准的SNMP协议的网络设备,包括路由器、交换机等,并提供网络设备平台的的相关信息,因此可以从宏观上完成网络管理的五大功能—性能管理、配置管理、故障管理、计费管理、安全管理。
由于可监控的内容是由网络设备制造厂家已经定好的,因此无法对网络进行更细致的监控,比如对各种网络服务(HTTP,SMTP,POP3,FTP,DNS,TELNET等)进行监控。
另外从网络安全角度来看,比如防火墙系统,由于内外网间通信的每一个包都要经过它并经分析之后才决定能否通过,因此防火墙完全有能力对内外网间的通信情况进行非常细致的监控。
但防火墙的这种工作方式却不可避免地对网络性能存在一定的影响。
它的主要意义在于实现了网络监控。
随着内部网络的规模与容量的日渐扩大,保持系统的正常运作将会变得越来越重要。
网络监控能使系统及时地发现网络流量异常的现象,使服务器在发现非法入侵后能立即做出反应,来保护自己的服务器不被破坏,以求获得安全性的同时,提高网络性能。
本论文设计和实现了一种基于网络监听和协议分析技术的网络监控系统。
相对与基于应用层协议SNMP的网络监控来说,由于本方案的网络监控工作在网络的更底层——数据链路层,所以可监视的内容将更加丰富、控制也更细致灵活;相对于网关式的防火墙等,本方案是基于旁路监听模式的,对网络的正常使用毫无影响。
第二章网络监控系统的基本原理
实现网络监控,必须掌握Internet和TCP/IP协议的基础知识,熟悉编程的相关内容。
进行数据报截取,还要了解Winsock2SPI相关应用。
本系统用VC++作为开发工具,VisualC++不仅仅是一个编译器。
它是一个全面的应用程序开发环境,使用它可以充分利用具有面向对象特性的C++来开发出专业级的Windows应用程序。
为了能充分利用这些特性,必须掌握Microsoft基本类库(MFC)的层次结构。
该层次结构包容了WindowsAPI中的用户界面部分,能够很容易地以面向对象的方式建立Windows应用程序。
2.1简介Internet与Tcp/Ip协议
2.1.1Internet基础
80年代以来,随着计算机技术的发展和完善,特别是PC的出现,全世界越来越多的计算机采用各种通信媒体相互进行连接,这就是所谓的Internet。
Internet是目前国际上最大的异构互联广域网和最大的信息集散地,采用TCP/IP协议和其他统一的标准,将世界各地业已存在的大量局域、广域网络连接起来,形成一个巨大的网中之网,将全球联系起来,实现了世界范围内的信息、资源和服务共享,极大地扩展了计算机网络应用的外延和内涵。
通过网络,我们可以和其他连到网络上的用户一起共享网络资源,如磁盘上的文件及打印机、调制解调器等,也可以和他们互相交换数据信息。
图2-1现代人交换信息图
图2-2OSI及TCP/IP体系结构图
2.1.2TCP/IP协议
TCP/IP(TransmissionControlProtocol/InternetProtocol,传输控制协议/网际协议)是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的功能
●在网络存取层及端对端传输层之间传递信息。
●进行数据报的拆解与重组。
●将数据报传送到目标主机。
2.IP地址
TCP/IP网上的计算设备或主机(也称为节点)都分配有一个唯一的地址,叫做IP地址。
IP地址属于三层逻辑地址,用来标识TCP/IP网络中的每一台设备,采用分成结构,32位,共4个8位组,采用网络位+主机位的形式。
表2-1IP地址分类
地址
类型
引导位
网络位
地址范围
地址结构
主机位可用
地址数
A类
0
1--126
网+主+主+主
16777214
B类
10
128--191
网+网+主+主
65534
C类
110
192--223
网+网+网+主
254
D类
1110
224--239
组播地址
E类
1111
240--
研究用地址
◇127.X.X.X用于本地回送测试
◇IP网络地址由NIC统一分配,以保证IP地址的唯一性
★端口号
应用层的每种服务都有一个唯一的端口号,例如Telnet的端口号为23。
当TCP或UDP由IP收到数据后,会根据标头的端口号将数据转交给对应的程序处理。
需要注意的是,TCP和UDP的应用程序可分配相同的端口号,必须配合端口号和传输协议种类才可以决定数据对应的程序。
知名的端口号:
表2-2知名端口号
FTP
TELNET
SMTP
DNS
TFTP
SNMP
NAME
21
23
25
53
69
161
42
端口号0到255已经保留给著名的服务,256到1023则分配给UNIX特有的服务。
2.2MFC简介
MFC是一个用来构造Win32应用程序的C++类库。
该库的主要优点是效率高。
它减少了大量在建立Windows程序时必须编写的代码。
同时它还提供了所有一般C++编程的优点,例如继承和封装。
MFC是可移植的,例如,在Windows3.1下编写的代码可以很容易地移植到WindowsNT或Windows95上。
MFC对Win32API进行了封装,用C++结构把Win32函数和数据类型封装起来。
另外,MFC还含有大量像WinMain()函数一样的许多函数都需要的标准代码,使用户可以不用自己提供代码。
MFC封装类中最重要的是CWnd,它包含了Win32API中绝大多数的窗口功能。
使用CWnd类的最大的好处是创建和操作窗口的简易性。
使用Win32API在C语言中创建一个窗口需要用到大量的数据结构和调用几个相关函数。
MFC通过允许用户实例化一个CWnd对象和调用几个成员函数而简化了这些工作。
这种使用C数据结构对象和全局函数的简单性适用于整个MFC库。
MFC还简化和改进了应用程序响应消息的方式。
把消息映射到成员函数中,同时编写一个成员函数来处理一个具体的消息,而不是编写一个庞大Switch语句的窗口过程,是代码更简洁。
基础类库MFC的核心是以C++形式封装了大部分的WindowsAPI。
类库表示窗口、对话框、设备上下文、公共GDI对象(如画笔、调色板、控制框)和其他标准的Windows部件。
这些类提供了一个面向Windows中结构的简单的C++成员函数的接口。
MFC可分为两个主要部分:
基础类、宏和全程函数。
基础类中包括基类、应用程序框架类、应用程序类、命令相关类、文档/视类、线程类、可视对象类、窗口类、视类、对话框类、属性表、控制类、菜单类、通用类、其他支持类、OLE基类、数据库类等等,在这里不一一列举。
宏和全程函数:
若某个函数或变量不是某个类的一个成员,那么它是一个全程函数或变量。
Microsoft基本宏和全程函数提供以下功能:
●数据类型;
●运行时刻对象类型服务;
●诊断服务;
●异常处理;
●Cstring格式化及信息框显示;
●消息映射;
●应用消息和管理;
●对象连接和嵌入(OLE)服务;
●标准命令和WindowsIds。
常见的全程函数和宏有:
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类的定义如下:
classCObject
{
public:
//与动态创建相关的函数
virtualCRuntimeClass*GetRuntimeClass()const;
析构函数
virtual~CObject();//virtualdestructorsarenecessary
//与构造函数相关的内存分配函数,可以用于DEBUG下输出诊断信息
void*PASCALoperatornew(size_tnSize);
void*PASCALoperatornew(size_t,void*p);
voidPASCALoperatordelete(void*p);
#ifdefined(_DEBUG)&&!
defined(_AFX_NO_DEBUG_CRT)
void*PASCALoperatornew(size_tnSize,LPCSTRlpszFileName,intnLine);
#endif
//缺省情况下,复制构造函数和赋值构造函数是不可用的
//如果程序员通过传值或者赋值来传递对象,将得到一个编译错误
protected:
//缺省构造函数
CObject();
private:
//复制构造函数,私有
CObject(constCObject&objectSrc);//noimplementation
//赋值构造函数,私有
voidoperator=(constCObject&objectSrc);//noimplementation
//Attributes
public:
//与运行时类信息、串行化相关的函数
BOOLIsSerializable()const;
BOOLIsKindOf(constCRuntimeClass*pClass)const;
//Overridables
virtualvoidSerialize(CArchive&ar);
//诊断函数
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
//Implementation
public:
//与动态创建对象相关的函数
staticconstAFX_DATACRuntimeClassclassCObject;
#ifdef_AFXDLL
staticCRuntimeClass*PASCAL_GetBaseClass();
#endif
};
2.3Winsock2SPI介绍
Winsock2是一个接口,而不是协议,所以它可以用于发现和使用任意数量的底层传输协议所提供的通信能力。
起初的Winsock是围绕着TCP/IP协议运行的,但是在Winsock2中却增加了对更多传输协议的支持。
Winsock2不仅提供了一个供应用程序访问网络服务的Windowssocket应用程序编程接口(API),还包含了由传输服务提供者和名字解析服务提供者实现的Winsock服务提供者接口(SPI)和ws2_32.dll。
Winsock2的传输服务提供者是以动态链接库的形式(DLL)存在的,它是通过WSPStartup函数为上层函数提供接口,而其他的传输服务提供者函数则是通过分配表的方式来访问WS2_32.DLL。
传输服务提供者的动态链接库只有在应用程序需要时才由Ws2_32.dll来装入内存中的,在不需要时则会被自动卸载。
以下是Winsock2在传输服务提供者上的WOSA(Windows开放服务结构):
----------------------------
|Windowssocket2应用程序|
----------------------------Windowssocket2API
|WS2_32.DLL|
----------------------------Windowssocket2传输SPI
|传输服务提供者(DLL)|
----------------------------
WindowssocketSPI在服务提供者中使用了以下的函数前缀命名方式:
WSP(Windowssocket服务提供者),WPU(Windowssocket提供者向上调用),WSC(Windowssocket配置)。
每一个传输服务提供者都有它自己所支持的传输协议,它是使用WSAPROTOCOL_INFOW结构来实现的。
传输服务提供者把所有的相关信息都存放在这个结构中,而应用程序就是通过这个结构的内容来将自己和相应的传输服务提供者相关联。
WindowssocketSPI提供三种协议:
分层协议,基础协议和协议链。
分层协议是在基础协议的上层,依靠底层基础协议实现更高级的通信服务。
基础协议是能够独立,安全地和远程端点实现数据通信的协议,它是相对与分层协议而言的。
协议链是将一系列的基础协议和分层协议按特点的顺序连接在一起的链状结构,请参见下图:
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提供了介质级别的流量管理,应用程序则提供了有关如何实现网络相关的操作,它实现了用户所希望的功能。
在传输服务提供者的实现过程中,安装顺序是非常重要的。
我们不仅要正确的安装服务提供者,而且还必须在Windowssocket中注册,将相关的系统信息保存在数据库中,这样Ws2_32.dll才能够方便的获得下层服务提供者的相关信息。
在Ws2_32.dll中提供了用来安装服务提供者的函数WSCInstallProvider,它需要服务提供者的有关数据,比如DLL的名称和路径。
同时Ws2_32.dll还提供了卸载服务提供者的函数WSCDeinstallProvider,在不需要时通过它将特定的服务提供者从系统中删除。
为什么说传输服务者的安装顺序很重要呢?
在服务提供者配置函数中的WSCEnumProtocols是用来枚举系统中所有已安装的服务提供者,它按照服务提供者的安装顺序相应的列出他们。
在前面也提到过,Ws2_32.dll在服务提供者中按安装顺序搜寻和WSASocket/socket提供的三个参数相匹配的服务提供者,所以安装顺序在一定程度上是决定了服务提供者是否被正确调用的关键。
Windowssocket2还提供了一个动态链接库Sporder.dll,它提供了对已安装的所有服务提供者顺序的重新排列。
服务提供者系统中区分基础协议,分层协议和协议链是通过结构WSAPROTOCOL_INFOW中的Protocolchain结构的ChainLen值来实现的。
分层协议的ChainLen值为0,基础协议的值为1,而协议链的值是大于1。
在数据传输服务提供者的实现方式中分层协议和基础协议几乎是相同的,它们的不同之处在安装上。
Windows中,现有的系统服务提供者(系统自带)几乎已提供了所有基本的服务,因此我们所写的服务提供者程序,都可以对数据报进行适当“修饰”后调用系统服务提供者来完成绝大部分剩下的功能,无论是基础服务提供者还是分层服务提供者都可以使用这种技术,免去不必要的劳动。
基础服务提供者的实现过程主要是替换当前系统服务提供者的安装路径为自己的服务提供者的安装路径即可,当然我们必须保存所有系统服务者的相关数据,在我们卸载自己的服务提供者还原系统服务提供者时要用到这些信息,如系统服务者DLL的名称和路径。
而协议链就不同了,首先我们必须安装好所有的基础协议和分层协议后,再构造协议链的WSAPROTOCOL_INFOW结构链,组成协议链的每个协议都会在协议链的ProtocolChain.ChainEntries数组中被定义,协议链数组中的第一个协议应该是第一个分层服务提供者。
当然在安装分层协议及协议链时我们不会改变系统服务提供者,最多只是改变系统服务提供者的安装顺序罢了。
在此,我们以分层服务提供者为例来说明数据传输服务提供者的安装过程。
Ws2_32.dll是使用标准的动态链接库来加载服务提供者接口的DLL到系统中去的,并调用WSPStartup来初始化。
WSPStartup是WindowsSocket2应用程序调用SPI程序的初始化函数,也就是入口函数。
WSPStartup的参数LPWSAPROTOCOL_INFOW指针提供应用程序所期望的协议信息,然后通过这个结构指针我们可以获得所保存的系统服务提供者的DLL名称和路径,加载系统服务提供者后查找到系统SPI程序的WSPStartup函数的指针,通过这个指针我们就可以将自己服务提供者的WSPStartup函数和系统SPI程序的WSPStartup函数相关联,进而调用系统的各个服务提供者函数。
2.4Winsock编程要点
Winsock控件是一个专门用于Windows网络编程,与Sockets完全兼容的ActiveX控件,它提供了访问TCP和UDP网络服务的方便途径。
网络编程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 进程 监控 系统 研究 资料
![提示](https://static.bdocx.com/images/bang_tan.gif)