




下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、研究管理代理与监控模块通信设计探析 摘要:详细介绍了面向应用软件的网络监控系统中管理代理和监控模块通信的设计与实现过程。包括管理信息存储的优化设计、内存映射文件的存储数据结构设计、监控指令转发技术、内存映射文件的通信方式、同步机制应用等。通过内存映射文件方式存储管理信息,高效地完成了收集各应用程序实例的监控信息任务,并实现了监控信息的存储、共享和监控模块与管理代理间实时信息交换的功能。关键词:优化存储;内存文件映射;消息机制;同步机制随着网络规模增大,网络结构及网络应用日渐复杂,传统的物理安全技术和措施已经不足以保证信息系统的安全,因此网络管理系统
2、作为网络安全运行的保证,其重要性越来越突出。为了提高计算机网络信息安全,许多相关的网络安全产品被开发,但大多是基于网络硬件设备,如路由器、集线器、交换机等,而对网络应用软件的研究和开发相对较少14。为了保证网络环境中的应用程序正常高效地运行,笔者设计了基于SNMP的ASNMS(Application Software Net Monitoring System,网络应用软件监控系统)。该系统选择运行于网络环境中的应用程序为研究对象5,6。1网络应用软件监控系统(ASNMS)简介ASNMS的主要监控目标是网络中的应用软件,通过及时获取软件中重要变量值(如系统配置、状态指示等),从而及时了解整个网
3、络中应用程序的状态,并且还可以通过管理站点对各受控站点中的应用程序进行控制操作,提高整个网络和应用系统的安全性。该网络应用软件监控系统主要有三个模块5,6:(1)管理站点主程序。该程序在管理站点上运行。通过该程序,管理站点可以使用UDP/IP协议与管理范围内的所有受控站点进行通信,收集网络应用程序的监控信息,并下发各种控制命令。(2)管理代理。每一个受控站点上运行一个管理代理程序(有且仅有一个)。管理代理是系统的通信中心。一方面通过内存映射文件与受控站点上的各应用程序实例进行通信,收集各应用程序实例的监控信息;另一方面通过UDP协议与管理站点通信,发送受控站点的管理信息以及转发管理站点的控制信
4、息。(3)监控模块。该模块是供软件开发人员使用的一个通用接口模块。它负责从受控应用程序中获取监控信息,发送到管理站点,并且也能接收从管理代理转发的管理站点命令,对受控应用程序执行一定的控制操作。从结构上来看,监控模块附属于受控应用程序,但它以单独的线程形式存在。2管理信息存储的设计为了监控模块工作的需要,同时为了能更方便地将监控信息传送给管理代理,监控模块需要将监控信息以一定的形式存储起来。监控模块监控的目标是应用程序中的变量。由于现在软件开发大多使用的是面向对象的方法,在其程序中各种变量是有层次结构关系的,这一点必须在监控信息中体现出来7。监控信息从逻辑上看应该是以树的形式存在,并且存储的是
5、各种变量的信息,而变量的长度是不相同的,在这棵树中各个节点的空间大小有可能不相同。由此看来,无论是从存储内容上还是从逻辑结构上看,监控信息的存储结构均是相对较为复杂的。下面三种设计方案可以满足这样的要求:(1)在监控模块内存空间内生成一棵二叉树。这是最常规的存储方法。在此情况下,只需要设计一个较为合理的树结构,二叉树就能直接存储在监控模块的内存空间中,访问方便。同时因为在许多语言中均有任意类型的数据类型,由此可以将不同数据类型的数据方便地存储在一种数据结构中。但是由于这棵树存在于监控模块的内存空间中,不方便管理代理程序对其读取,监控模块还需要通过一定的方法将该树传送给管理代理4,7。优点:实现
6、简单,监控模块可以很方便地对其进行读写操作。缺点:不方便管理代理程序对监控信息读取,需要使用其他方法将信息传送给管理代理。(2)将监控信息存储在磁盘文件中。为了解决管理代理和监控模块共享监控信息的问题,监控模块可以将监控信息存储为磁盘文件形式。在此情况下,需要设计一套完整合理的文件空间使用策略,保证能够完整地存储监控信息。由于在Windows程序中采用了虚拟内存策略,不同应用程序内存空间是不同的,即使某应用程序获取了另一个程序中的某个指针,也不能正确地访问到其数据。在对变量值进行存储时,一定要注意不能存储有关变量的指针信息,而应该想办法存储其中变量的实际数据8。同时因为是将监控信息存储于磁盘上
7、,需要采取一定的措施尽量避免出现垃圾文件的情况,同时还要防止在工作状态下用户有意或无意地修改、删除该文件。优点:多个程序可以方便地共享数据。缺点:实现较复杂,容易产生垃圾文件,容易泄漏和丢失监控信息。(3)将监控信息存储在内存文件映射中。这是对方案(2)的改进。方案(2)将监控信息存储于磁盘文件中,由此使得容易产生垃圾文件、容易泄漏和丢失监控信息。那么如果将监控信息直接存储在内存当中呢?采用内存映射文件是一个很好的解决办法。应用程序在需要时在内存中开辟一定的空间存储数据,当应用程序关闭后,由于操作系统的内存管理机制,内存文件将自动被回收,安全性高。但是在生成内存映射文件时,必须要指定文件的大小
8、,此时如果处理不当将可能出现存储空间不够用的情况4,8。优点:多个程序可以方便地共享数据,数据不易泄漏,安全性高。缺点:实现较复杂,必须指定文件大小,处理不当可能出现空间不够用的情况。综合三种方案,方案(3)是最合适的。只要指定足够的文件大小,它不仅满足监控模块存储管理信息的需要,信息安全性高,同时可方便地实现监控模块与管理代理之间实时信息交换功能,从而解决它们之间的通信问题。3管理代理与监控模块通信的设计31管理代理与监控模块间通信通信包括系统初始化连接建立、命令转发和自定义消息。(1)系统初始化连接建立。管理代理随受控站点启动后,必须接收各个应用程序实例的监控模块的注册信息,与监控模块建立
9、初始连接。(2)命令转发。管理代理接收到管理站点发送的UDP报文后,先识别该报文是发送给哪个监控模块的,然后通过Windows消息形式发送给指定的监控模块。(3)管理代理与监控模块之间约定一系列自定义消息,并向Windows注册,保证双方能够正确地通过自定义消息进行通信。32监控信息的收集与组织在受控站点上,管理代理与多个应用程序实例的监控模块之间是通过内存映射文件进行通信的。监控信息存储在内存映射文件中。(1)监控信息收集就是对监控模块对应的内存映射文件进行遍历。通过遍历获得最新的被监控应用程序的状态、监控变量的值等。(2)监控信息收集时,需提供有效的同步机制,防止管理代理与监控模块同时访问
10、同一个监控信息文件时出错。(3)监控信息组织就是提供安全高效的数据存储结构,能够完整地记录所有监控信息。33内存映射文件存储数据结构设计为了能存储完整的变量结构信息,可将监控信息的逻辑存储结构设计为如图1所示。在监控信息的逻辑结构中存在两种结构指针,即横向指针表示父子关系和纵向指针表示兄弟关系,由此而构成了一棵二叉树。本文原文在图1所示结构中,由于不同变量类型存储大小不同,从而导致二叉树中各个节点的大小不统一。为了方便地进行存储空间管理,同时又能准确完整地记录如上变量结构信息,笔者设计了一套内存映射文件的存储数据结构。其基本思想为:将数据本身与数据间的逻辑关系分开进行处理,每次根据实际使用的需
11、要在文件空闲空间中分配相应大小的空间,并在该空间的起始位置生成一个空间信息记录。其中包括存放的变量类型、变量大小、变量指针、结构指针等数据信息。此外还包括了该空间的地址、前后相邻区域地址、本空间大小等空间管理信息。真正的记录数据实体存放在该空间信息记录之后的剩余空间中(剩余空间的大小可以是不同的)。文件的存储结构如图2所示。由图2可以看出,在监控信息存储文件中所有的存储空间均是前后紧连着的。通过空间信息记录可以得知某区域的大小以及是否正在被使用。这样就能够方便地进行空间分配和回收工作。又因为在空间信息记录中存在变量结构指针,因而通过空间信息记录也能方便地访问到数据之间的逻辑结构关系。由此看出,
12、空间信息记录在整个存储设计中占有很重要的位置,正是利用它才实现了对存储空间的灵活使用。空间信息记录的数据结构设计如下:typedef struct TItemInfo/以下为数据(变量)信息char NodeNameMAX_NODENAME;/节点名 char NodeInfoMAX_NODEINFO;/节点信息 int NodeType;/1:程序节点;2:类节点;3:变量节点;其他未定义int VarType;/存储数据的变量类型,特别:程序节点存储了句柄信息,long型int VarSize; /数据大小bool Writable; /变量是否可写void *VarAddr; /数据在程
13、序中的地址void *PBrother; /前一个同级(兄弟)节点void *NBrother; /下一个同级(兄弟)节点void *Father; /父亲节点void *Child; /下一级(孩子)节点/以下为空间管理信息void *Addr; /本区域在文件中的相对地址long ItemSize; /本区域大小void *PAddr; /前一个区域在文件中的相对地址void *NAddr; /后一个区域在文件中的相对地址bool InUse; /本区域是否正在使用TItemInfo;4关键技术及其具体实现41命令转发管理代理接收到的命令有查询被监控应用程序状态、刷新监控变量、锁定监控变量
14、、锁定应用程序窗口等。管理代理根据UDP报文内容,将命令发送给指定的监控模块。命令的转发均是通过自定义消息实现的。本文使用Windows消息机制自定义了一系列消息并实现其消息的处理,结合到本监控系统的需要,管理代理中主要定义了如下消息及其处理:(1)WM_READAPPHANDLE:读应用程序实例中监控模块的相关句柄;(2)WM_READAPPSTRUCT:读应用程序实例中的MIB子树结构;(3)WM_READAPPDATA:读应用程序实例中的MIB节点的值;(4)WM_SETAPPDATA:设置应用程序中的MIB节点的值;(5)WM_READAPPTRAP:读应用程序发送来的Trap信息;(
15、6)WM_READPROXYSET:为应用程序实例的MIB子树中某个MIB节点设置阈值;(7)WM_MIBERROR:代理与应用程序之间的通信发生错误。由于在一个标准的Windows应用程序中,消息是由窗口处理的,而在管理代理中没有窗口,也不是从窗口继承的一个类,管理代理不能直接进行消息操作。在程序中使用AllocateHWnd函数为监控模块虚拟生成一个消息窗口,专用来进行消息捕获、发送与处理。42内存文件映射与同步机制421内存文件映射实现管理代理与监控模块之间通信管理代理与应用程序实例的监控模块之间的数据交换采用内存文件映射这种进程间的通信方式。管理代理的文件映射和文件映射视图的创建代码如
16、下:HANDLE h_filemap; /内存文件映射句柄HANDLE h_LocalMapView; /内存文件映射视图句柄/创建内存文件映射对象,有读写权限,对象名为ProxyFileMaph_filemap=CreateFileMapping(HANDLE)0xFFFFFFFF, NULL, PAGE_READWRITE, 0, VIEWSIZE, "ProxyFileMap");if (h_filemap=NULL)AfxMessageBox("Create Local File Map Error!"); return false;/创建内存文
17、件映射视图if(h_LocalMapView=MapViewOfFile(h_filemap,FILE_MAP_ALL_ACCESS,0,0,0)=NULL)AfxMessageBox("Create Local Map View Error!"); return false;管理代理启动后,在其内存文件映射视图中写入自己的窗口句柄,供各个应用程序实例读取。监控模块初始化时,从管理代理的内存文件映射视图中得到管理代理的窗口句柄,向管理代理的内存文件映射视图中写入自己的内存文件映射对象名,并发送请求注册消息给管理代理。管理代理收到消息后,从自己的内存文件映射视图中读出应用程序
18、实例的内存映射文件对象名,创建应用程序实例内存文件映射视图9。代理和监控模块的通信通过读写内存文件映射视图和互相发送消息实现。422同步机制管理代理和监控模块通过对内存映射文件进行读操作和写操作来完成数据交换。由于存在多个独立的应用程序实例进程,它们可 能同时对管理代理进行写操作。可能存在这样的情况:当一个应用程序的实例向管理代理的内存文件中写入数据,并通知管理代理读取时,另外一个应用程序的实例也在做同样的写操作,它写入的数据将前一次写入的数据覆盖了。当管理代理响应消息从内存文件中读入时,得到的是第二个应用程序实例的数据,第一个应用程序实例写入的数据已丢失了。在应用程序实例的内存文件上也存在类
19、似的情况:当一个应用程序实例连续向内存文件中写入时,管理代理可能还来不及对第一次写入的数据进行读取,第二次的写入已经将第一次写入的内容覆盖了。在对内存文件的读写过程中引入同步机制是必要的。程序中采用的同步机制是信号灯机制9。在管理代理上为内存文件创建信号灯:/*创建信号灯,信号灯名为ProxyMapViewSemaphore ,初始计数为1,最大计数也是1,h_SemAccessMapView为该信号灯的句柄*/h_SemAccessMapView=CreateSemaphore(NULL,1,1,"ProxyMapViewSemaphore"); 在监控模块中,打开这个信
20、号灯:/*打开名为ProxyMapViewSemaphore 的信号灯,h_SemAccessMapView为信号灯句柄*/h_SemAccessMapView=OpenSemaphore(SEMAPHORE_ALL_ACCESS,false, "ProxyMapViewSemaphore");监控模块每次对管理代理内存文件写操作前,均要等待信号灯的信号:/*等待信号灯h_SemAccessMapView的信号,知道信号灯为有信号时才返回*/:WaitForSingleObject(h_SemAccessMapView,INFINITE);/对管理代理内存文件映射的写操作管
21、理代理在每次对内存文件进行读操作后,都要增加信号灯的计数:/对内存文件的读操作/增加信号灯h_SemAccessMapView的计数,每次增加1ReleaseSemaphore(h_SemAccessMapView,1,NULL);5结束语在对SNMP中MIB信息和协议数据单元扩充的基础上,设计并实现了面向应用软件的网络监控系统。该系统提供了对应用程序类中成员变量和成员函数的监控功能。参考文献:1唐亚哲,张鹏,李增智,等. DIINMS分布智能网络管理系统的设计与实现J.小型微型计算机系统 ,2002,23(8):926929.2田力威,尹朝万.基于CORBA的智能网络管理系统的结构及实现J.小型微型计算机系统,2002,23(7):810813.3HUNTER, PHILIP.Integrated
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 离婚协议书范本针对离婚后子女医疗问题的协议
- 婚姻解除协议书范本:共同子女抚养及监护权分配
- 金融控股公司债权债务三方转让与集团化运营协议
- 创意离婚协议书:财产分割与子女抚养权纠纷处理方案
- 精准对接个人对个人直升机租赁及观光服务协议
- 物流行业生产经营信息保密与物流服务质量协议
- 离婚协议书范本:子女教育及监护问题
- 公共停车场物业经营权及收益分成合作协议
- 班组级安全培训内容课件
- 《公共关系原理与实务》 第四版 练习与答案 朱崇娴 第6-11章
- 网络分析仪企业ESG实践与创新战略研究报告
- 《拍摄校园微视频》教学课件-2024-2025学年冀美版(2024)初中美术七年级下册
- 抗美援朝“铭记历史迎接挑战”-第11年迎回在韩中国人民志愿军烈士遗骸主题班会课件
- 公路工程造价编制自采材料预算单价计算课件
- 保险行业组织发展
- 学生宿舍的卫生管理研究
- 管制部运行管理手册(机场)第六章 运行程序
- 药品临床综合评价解读
- 2025年中国人寿:养老险北京分公司招聘笔试参考题库含答案解析
- 2025年度建筑地基基础清包工劳务合同规范范本
- 逻辑思维在写作中的运用与提升
评论
0/150
提交评论