加入收藏
设为首页
关于我们
您现在的位置: 101美术高考网 >> 论文中心 >> 工学 >> 通信学 >> 文章正文
  管理代理与监控模块通信设计         ★★★★
管理代理与监控模块通信设计
作者:101ms.com 文章来源:中国论文下载中心 点击数: 更新时间:2008-10-18 7:48:59

  摘要:详细介绍了面向应用软件的网络监控系统中管理代理和监控模块通信的设计与实现过程。包括管理信息存储的优化设计、内存映射文件的存储数据结构设计、监控指令转发技术、内存映射文件的通信方式、同步机制应用等。通过内存映射文件方式存储管理信息,高效地完成了收集各应用程序实例的监控信息任务,并实现了监控信息的存储、共享和监控模块与管理代理间实时信息交换的功能。
  关键词:优化存储;内存文件映射;消息机制;同步机制
  
  随着网络规模增大,网络结构及网络应用日渐复杂,传统的物理安全技术和措施已经不足以保证信息系统的安全,因此网络管理系统作为网络安全运行的保证,其重要性越来越突出。为了提高计算机网络信息安全,许多相关的网络安全产品被开发,但大多是基于网络硬件设备,如路由器、集线器、交换机等,而对网络应用软件的研究和开发相对较少[1~4]。为了保证网络环境中的应用程序正常高效地运行,笔者设计了基于SNMP的ASNMS(Application Software Net Monitoring System,网络应用软件监控系统)。该系统选择运行于网络环境中的应用程序为研究对象[5,6]。
  
  1网络应用软件监控系统(ASNMS)简介
  
  ASNMS的主要监控目标是网络中的应用软件,通过及时获取软件中重要变量值(如系统配置、状态指示等),从而及时了解整个网络中应用程序的状态,并且还可以通过管理站点对各受控站点中的应用程序进行控制操作,提高整个网络和应用系统的安全性。该网络应用软件监控系统主要有三个模块[5,6]:
  (1)管理站点主程序。该程序在管理站点上运行。通过该程序,管理站点可以使用UDP/IP协议与管理范围内的所有受控站点进行通信,收集网络应用程序的监控信息,并下发各种控制命令。
  (2)管理代理。每一个受控站点上运行一个管理代理程序(有且仅有一个)。管理代理是系统的通信中心。一方面通过内存映射文件与受控站点上的各应用程序实例进行通信,收集各应用程序实例的监控信息;另一方面通过UDP协议与管理站点通信,发送受控站点的管理信息以及转发管理站点的控制信息。
  (3)监控模块。该模块是供软件开发人员使用的一个通用接口模块。它负责从受控应用程序中获取监控信息,发送到管理站点,并且也能接收从管理代理转发的管理站点命令,对受控应用程序执行一定的控制操作。从结构上来看,监控模块附属于受控应用程序,但它以单独的线程形式存在。
  
  2管理信息存储的设计
  
  为了监控模块工作的需要,同时为了能更方便地将监控信息传送给管理代理,监控模块需要将监控信息以一定的形式存储起来。监控模块监控的目标是应用程序中的变量。由于现在软件开发大多使用的是面向对象的方法,在其程序中各种变量是有层次结构关系的,这一点必须在监控信息中体现出来[7]。监控信息从逻辑上看应该是以树的形式存在,并且存储的是各种变量的信息,而变量的长度是不相同的,在这棵树中各个节点的空间大小有可能不相同。由此看来,无论是从存储内容上还是从逻辑结构上看,监控信息的存储结构均是相对较为复杂的。下面三种设计方案可以满足这样的要求:
  (1)在监控模块内存空间内生成一棵二叉树。这是最常规的存储方法。在此情况下,只需要设计一个较为合理的树结构,二叉树就能直接存储在监控模块的内存空间中,访问方便。同时因为在许多语言中均有任意类型的数据类型,由此可以将不同数据类型的数据方便地存储在一种数据结构中。但是由于这棵树存在于监控模块的内存空间中,不方便管理代理程序对其读取,监控模块还需要通过一定的方法将该树传送给管理代理[4,7]。
  优点:实现简单,监控模块可以很方便地对其进行读写操作。
  缺点:不方便管理代理程序对监控信息读取,需要使用其他方法将信息传送给管理代理。
  (2)将监控信息存储在磁盘文件中。为了解决管理代理和监控模块共享监控信息的问题,监控模块可以将监控信息存储为磁盘文件形式。在此情况下,需要设计一套完整合理的文件空间使用策略,保证能够完整地存储监控信息。由于在Windows程序中采用了虚拟内存策略,不同应用程序内存空间是不同的,即使某应用程序获取了另一个程序中的某个指针,也不能正确地访问到其数据。在对变量值进行存储时,一定要注意不能存储有关变量的指针信息,而应该想办法存储其中变量的实际数据[8]。同时因为是将监控信息存储于磁盘上,需要采取一定的措施尽量避免出现垃圾文件的情况,同时还要防止在工作状态下用户有意或无意地修改、删除该文件。
  优点:多个程序可以方便地共享数据。
  缺点:实现较复杂,容易产生垃圾文件,容易泄漏和丢失监控信息。
  (3)将监控信息存储在内存文件映射中。这是对方案(2)的改进。方案(2)将监控信息存储于磁盘文件中,由此使得容易产生垃圾文件、容易泄漏和丢失监控信息。那么如果将监控信息直接存储在内存当中呢?采用内存映射文件是一个很好的解决办法。应用程序在需要时在内存中开辟一定的空间存储数据,当应用程序关闭后,由于操作系统的内存管理机制,内存文件将自动被回收,安全性高。但是在生成内存映射文件时,必须要指定文件的大小,此时如果处理不当将可能出现存储空间不够用的情况[4,8]。
  优点:多个程序可以方便地共享数据,数据不易泄漏,安全性高。
  缺点:实现较复杂,必须指定文件大小,处理不当可能出现空间不够用的情况。
  综合三种方案,方案(3)是最合适的。只要指定足够的文件大小,它不仅满足监控模块存储管理信息的需要,信息安全性高,同时可方便地实现监控模块与管理代理之间实时信息交换功能,从而解决它们之间的通信问题。  3管理代理与监控模块通信的设计
  
  3.1管理代理与监控模块间通信
  通信包括系统初始化连接建立、命令转发和自定义消息。
  (1)系统初始化连接建立。管理代理随受控站点启动后,必须接收各个应用程序实例的监控模块的注册信息,与监控模块建立初始连接。
  (2)命令转发。管理代理接收到管理站点发送的UDP报文后,先识别该报文是发送给哪个监控模块的,然后通过Windows消息形式发送给指定的监控模块。
  (3)管理代理与监控模块之间约定一系列自定义消息,并向Windows注册,保证双方能够正确地通过自定义消息进行通信。
  
  3.2监控信息的收集与组织
  在受控站点上,管理代理与多个应用程序实例的监控模块之间是通过内存映射文件进行通信的。监控信息存储在内存映射文件中。
  (1)监控信息收集就是对监控模块对应的内存映射文件进行遍历。通过遍历获得最新的被监控应用程序的状态、监控变量的值等。
  (2)监控信息收集时,需提供有效的同步机制,防止管理代理与监控模块同时访问同一个监控信息文件时出错。
  (3)监控信息组织就是提供安全高效的数据存储结构,能够完整地记录所有监控信息。
  
  3.3内存映射文件存储数据结构设计
  为了能存储完整的变量结构信息,可将监控信息的逻辑存储结构设计为如图1所示。在监控信息的逻辑结构中存在两种结构指针,即横向指针表示父子关系和纵向指针表示兄弟关系,由此而构成了一棵二叉树。
  
本文原文
  
  在图1所示结构中,由于不同变量类型存储大小不同,从而导致二叉树中各个节点的大小不统一。为了方便地进行存储空间管理,同时又能准确完整地记录如上变量结构信息,笔者设计了一套内存映射文件的存储数据结构。其基本思想为:将数据本身与数据间的逻辑关系分开进行处理,每次根据实际使用的需要在文件空闲空间中分配相应大小的空间,并在该空间的起始位置生成一个空间信息记录。其中包括存放的变量类型、变量大小、变量指针、结构指针等数据信息。此外还包括了该空间的地址、前后相邻区域地址、本空间大小等空间管理信息。真正的记录数据实体存放在该空间信息记录之后的剩余空间中(剩余空间的大小可以是不同的)。文件的存储结构如图2所示。
  由图2可以看出,在监控信息存储文件中所有的存储空间均是前后紧连着的。通过空间信息记录可以得知某区域的大小以及是否正在被使用。这样就能够方便地进行空间分配和回收工作。又因为在空间信息记录中存在变量结构指针,因而通过空间信息记录也能方便地访问到数据之间的逻辑结构关系。由此看出,空间信息记录在整个存储设计中占有很重要的位置,正是利用它才实现了对存储空间的灵活使用。空间信息记录的数据结构设计如下:
  typedef struct TItemInfo
  {//以下为数据(变量)信息
  char NodeName[MAX_NODENAME];//节点名
   char NodeInfo[MAX_NODEINFO];//节点信息
   int NodeType;//1:程序节点;2:类节点;3:变量节点;其他未定义
  int VarType;
  //存储数据的变量类型,特别:程序节点存储了句柄信息,long型
  int VarSize; //数据大小
  bool Writable; //变量是否可写
  void *VarAddr; //数据在程序中的地址
  void *PBrother; //前一个同级(兄弟)节点
  void *NBrother; //下一个同级(兄弟)节点
  void *Father; //父亲节点

  void *Child; //下一级(孩子)节点
  //以下为空间管理信息
  void *Addr; //本区域在文件中的相对地址
  long ItemSize; //本区域大小
  void *PAddr; //前一个区域在文件中的相对地址
  void *NAddr; //后一个区域在文件中的相对地址
  bool InUse; //本区域是否正在使用
  }TItemInfo;
  
  4关键技术及其具体实现
  
  4.1命令转发
  管理代理接收到的命令有查询被监控应用程序状态、刷新监控变量、锁定监控变量、锁定应用程序窗口等。管理代理根据UDP报文内容,将命令发送给指定的监控模块。命令的转发均是通过自定义消息实现的。本文使用Windows消息机制自定义了一系列消息并实现其消息的处理,结合到本监控系统的需要,管理代理中主要定义了如下消息及其处理:
  (1)WM_READAPPHANDLE:读应用程序实例中监控模块的相关句柄;
  (2)WM_READAPPSTRUCT:读应用程序实例中的MIB子树结构;
  (3)WM_READAPPDATA:读应用程序实例中的MIB节点的值;
  (4)WM_SETAPPDATA:设置应用程序中的MIB节点的值;
  (5)WM_READAPPTRAP:读应用程序发送来的Trap信息;
  (6)WM_READPROXYSET:为应用程序实例的MIB子树中某个MIB节点设置阈值;
  (7)WM_MIBERROR:代理与应用程序之间的通信发生错误。
  由于在一个标准的Windows应用程序中,消息是由窗口处理的,而在管理代理中没有窗口,也不是从窗口继承的一个类,管理代理不能直接进行消息操作。在程序中使用Allocate-HWnd函数为监控模块

[1] [2] 下一页


文章录入:admin    责任编辑:admin 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    专 题 栏 目
    最 新 热 门
    最 新 推 荐
    相 关 文 章
    没有相关文章
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 网站公告 |
    Copyright © 2006 All Rights Reserved 中国美术高考网(国内最专业的美术高考门户网) 版权所有 未经允许 不得转载!
    网站咨询/管理员:101msw#163.com, 网站编辑/作品投稿/简章发布:101msw#163.com
    为防止垃圾邮件,请将"#"改为"@",编辑QQ:362058177 联系电话:13705952125