您的位置:首页 > 代理IP资讯
发布时间:2020-03-02 16:37:09
怎么更改ip地址、IP电话系统中SNMP代理的实现

  近几年来,作为Internet的应用之一的IP电话技术得到了飞速发展。目前的IP电话技术已从具有语音服务的PC初级产品和仅限定在IP网络内部范围,发展到多业务、高可靠性以及较好服务质量的含话音、传真、数据传送功能的电信业务。目前通过IP电话网关(Gateway)来实现PSTN和Internet互通,从而实现PC到电话和电话到电话之间的呼叫,并且话音通信的质量也大大地得到改善,能够满足商


  随着IP电话话务量的增加,有效的网络管理将会显现越来越重要的作用。网络管理包括与网络操作和维护有关的一切活动,通过监测和控制,满足所要求的业务质量并保证最有效地利用网络资源。在IP电话系统中,网络管理对改善IP电话业务的质量、支持更多的用户、提供更多的服务起着重要的作用。


  二、SNMP的基本概念


  1.管理模型


  在SNMP中,一般采用管理者-代理的管理模型,如图1所示。管理者可以是工作站、微机等,一般位于网络系统的主干或接近主干的位置,它负责发出管理操作的指令,并接收来自代理的信息。代理则位于被管理的设备内部,把来自管理者的命令或信息请求转换为本设备特有指令,完成管理者的指示,或返回它所在设备的信息。另外,代理也可以把在自身系统中发生的事件主动通知给管理者。


  管理者和代理之间的通信遵从SNMP及相关协议。管理者将管理要求通过管理操作指令传送给位于被管理系统中的代理,代理则直接管理被管理设备。代理可能因为某种原因拒绝管理者的指令。管理者和代理之间的信息交换可以分为2种:从管理者到代理的管理操作和从代理到管理者的事件通知。


  2.管理信息库(MIB)


  MIB是一个概念上的数据库,由被管理对象组成。每个管理代理管理MIB中属于自己的本地对象,这些对象的信息共同构成全网的MIB。SNMP协议的核心是被管理的对象。MIB的结构必须符合使用TCPΠIP—的Internet的管理信息结构(SMI)。


  RFC1155中的管理信息结构详细描述了MIB中对象的定义、组织、识别机制和如何在协议上编码传输。SMI最关键之处在于被管对象的定义使用了ASN.1语言来描述,精确的定义使得变量格式、内容没有二义性,它为MIB中的对象定义了模板。事实上,In ternet的SMI和相应的MIB是独立于具体的管理协议的(含SNMP),这对供应商和用户都有好处。


  3.网管代理(Agent)


  代理是驻留于网络被管理设备中的处理实体,作为一个智能前端处理器实现管理功能。每个代理拥有自己本地的MIB。事实上,SNMP协议的管理任务是移交给代理来执行的。代理直接与相应的功能实体通信并执行信息处理任务,其主要任务是访问相关模块数据,发布控制消息。有2种消息由代理提供:Get response和Trap。代理翻译来自管理者的请求、验证操作的可行性、执行命令并发出合适的响应。代理最重要的功能之一是将来自管理者的一般化的请求翻译成本地数据结构上的等效操作,这也就是说,代理将SNMP命令映射至本地操作,这种映射因不同代理设备而异。Trap报告一个关于预先定义事件的异常信息。


  三、网管代理系统结构


  IP电话中网管代理系统按照其功能划分为3个模块,如图2所示。


  图2网管代理系统结构图


  网管代理服务程序:网管代理系统的核心部分,负责接收管理站发来的SNMP操作并进行处理;


  代理-设备接口模块:提供网管代理与设备间的通信方式(设备是IP电话系统中的网关或网守,以下同);


  网管代理配置程序:配置网管代理服务程序运行所需的信息,它是网管代理系统中的可选部分,目的是使网管代理服务程序运行更灵活。


  在实现过程当中,网管代理服务程序作为一个后台程序存在于系统当中,管理信息保存在程序内部;代理-设备接口模块作为设备的子模块,它要及时的将设备的被管信息通过SNMP操作送到网管代理服务程序,或根据需要从网管代理服务程序中读取管理信息供设备使用;网管代理配置程序配置网管代理服务程序初始化时所需的一些参数。


  四、系统模块实现


  1.网管开发包分析


  (1)Snmp++


  Snmp++是为网络管理应用程序开发者提供的具有SNMP服务的一套C++类的集合。它具有基于面向对象模型建立的SNMP应用程序接口,在最小化的范围内使用已经存在的SNMP库,保证了程序的高效和可移植性。对于使用TCPIP协议的Internet来说,Snmp++封装了底层的Socket操作,提供了简单的API供开发者使用。


  (2)Agent++


  Agent++是在Snmp++的基础上,扩展了Snmp++中的概念,它是用来开发SNMP代理的一套C++类的集合。它继承了Snmp++的优点,封装了绝大部分的SNMP的标准操作,并且利用面向对象的特性,使开发者能够通过派生的子类,重载其中的虚函数,根据应用程序的需要灵活控制程序。


  在Agent++类库,定义和实现了在SMI和MIB中的文本语法规定,如:Group,Table,TableEntry,Index等。主要的类与文本语法规定的对应关系如表1所示。


  表1 SNMP协议描述与Agent++类的表示的对应关系


  协议描述类


  网管代理Mib


  用户MIB MibGroup


  Table MibTable


  TableEntry MibTableEntry


  Instance Mibleaf


  Snmp会话Snmpx


  PDU Pdux


  变量绑定VB Vbx


  对象标志符(OID)Oidx


  按照功能划分,Agent++软件开发包由4个模块组成,如图3所示。


  通信模块负责接收和发送SNMP消息,它在指定端口(通常是161)接收到来的请求消息,并发送响应消息;在指定端口(通常是162)接收和发送陷阱、信息通知消息。同时,它还要给消息处理模块提供接收到消息、发送消息的工具函数。在Agent++中,属于通信模块的类主要有Snmpx、RequestList、Request等。


  消息处理模块负责解析输入的请求消息,进行安全验证。它对通信模块传来的SNMP消息进行解析,判断解析结果是否合法,同时,也要把解析出来的社团名(community)与规定的社团名进行比较验证。如果解析结果合法且社团名验证通过,才能进行下一步操作。在Agent++中,属于消息处理模块的类主要有Request等。


  操作定位模块负责根据消息处理模块解析的结果,在MIB库中查找管理对象。它按照消息中包含的管理对象的对象标志符(OID),查找需要访问的管理对象。在Agent++中,属于操作定位模块的类有Request、Mib、MibGroup、MibTable等。


  MIB管理模块负责SNMP操作的具体实现。它按照操作类型(读或写),首先判断能否对管理对象进行操作,然后访问MIB库,按照要求读取数据或更新数据。在Agent++中,属于MIB管理模块的类有Request、MibTable、MibTableRow、Mibleaf等。


  通信模块消息处理模块和操作定位模块对所有的MIB(包括私有的MIB)都是相同的,开发具体设备的代理时可以直接利用这些模块。MIB管理模块只提供了基本的操作,还需要根据具体的MIB文件,重新定制MIB管理模块。


  2.网管代理服务程序


  网管代理服务程序是网管代理系统的核心部分,它使用Snmp++、Agent++网管开发包和管理信息库(MIB)文件编译器Agentgen来实现。图4描述了网管代理服务程序创建运行流程。


  图4代理创建-运行流程


  (1)MIB文件编译器Agentgen把用户MIB文件


  翻译译成能够被Agent++开发包API使用的通用访问函数代码,代码中提供了管理信息的C++语言的表示形式及其访问方法,这个过程创建的是私有的MIB管理模块;


  (2)根据用户的需要,对通用函数访问代码进行修改,加入用户特定的代码,使之能完成对设备管理信息的访问,向管理站发送告警消息等操作,这个过程就是定制私有的MIB管理模块;


  (3)将经过修改的通用访问函数代码、Snmp++类库、Agent++类库,以及按主程序模板编写的主程序组织在一起,使用C++编译器进行编译,即可生成网管代理服务程序。在后台运行网管代理服务程序,程序就可响应管理站和设备发来的SNMP操作指令,对管理信息进行访问。


  通用访问函数代码是由Agent++类库中所包含的基类的派生类组成。在基类中已经实现了访问管理对象的方法,根据面向对象语言的所具有的继承性,派生类中也具有访问用户MIB文件中管理对象的方法。但是,这些方法仅仅局限在基本的读写操作上,因此,需要在通用访问函数代码中加入用户特定的代码,这些代码主要是针对动态表格对象的行操作和代理向管理站发送告警消息操作而添加的。


  主程序模板为代理程序的组织提供了一个通用开发模式,对于不同需求的网管代理,都能够很好地满足。主程序模板的基本流程如下:


  (1)初始化SNMP:创建类Snmpx的一个实例;


  (2)创建MIB:创建类MIB的一个实例,保存所有的MIB信息并分发SNMP请求;


  (3)注册RequestList:创建类RequestList的一个实例,并在(2)中生成的Mib中进行注册;


  (4)初始化RequestList:Request List需要SNMP消息处理部件来接收和发送SNMP消息,因此要把


  (1)中SNMP消息处理部件进行注册;


  (5)添加MIB对象:以组(Group)为单位,根据需要添加所有的MIB对象;


  (6)初始化MIB:从磁盘上加载MIB数据,并用这些数据初始化MIB对象;


  (7)初始化Trap配置:从配置信息库中读取信息,初始化Trap配置,


  (8)主循环:主循环负责处理进入的请求,监测被管设备,升级管理信息。


  经过了以上的工作后,导入Snmp++和Agent+


  +类库,将通用访问函数代码和主程序文件用C++


  ·132·


  网络与通信


  &COMMUNICATION编译器,进行编译连接,即可得到网管代理程序。在前台或后台(通常在后台)运行,代理可以响应远端管理站发来的SNMP操作请求和向管理站发送告警消息。


  3.代理-设备接口模块代理-设备接口模块用来连通被管设备和代理程序,进行数据交换和更新。从物理关系上看,它是被管设备的一部分,存在于被管设备中;从逻辑关系上看,它又是网管代理系统的一部分,负责更新代理程序的数据。如果把代理程序看成是服务器的话,那么代理-设备接口模块就是可供开发者编制客户端程序的一个基本开发平台。在网管代理系统中,代理-设备接口模块是通过类SnmpOperation实现的。类的定义如下:


  class SnmpOperation{public:


  SnmpOperation(snmp—version vs,u—short port);


  SnmpOperation();


  ~SnmpOperation();


  int set—value();int get—value();


  void set—version(snmp—version vs);


  void set—port(u—short port);


  void set—retries(int rts);


  void set—timeout(int to);


  void set—oid(Oidx o);


  void set—oid(Oidx o,Oidx ind);private:


  snmp—version version;


  u—short localport;


  int retries;


  int timeout;


  Oidx index;


  Vbx vb;


  Oidx oid;


  };


  类SnmpOperation中封装了基本的SNMP操作,如Get(取值)、Set(设值)等,支持Snmpv1和Snmpv2c。开发者根据用户MIB中包含的管理信息,通过SnmpOpeation中的方法把设备中对应的管理对象的值发送给网管代理服务程序,更新管理信息的值。


  如果被管设备不支持C++(如某些网关使用C编制,需要在其中加入网管功能),则可以用其它SNMP开发包来代替实现该模块功能,因为对于网管代理服务程序来说,它和设备通信是使用SNMP原语进行交互,只要使用标准的SNMP操作即可更新代理程序中的数据。


  4.网管代理配置程序


  该模块负责配置网管代理的一些基本信息,例如:管理站地址、读写社团名等。在代理程序框架中,它是一个可选模块,为了使代理具有更大的灵活性,建议在开发时实现此模块。配置信息库可以以文本文件的形式存在,也可以以数据库的形式存在,或者以任何网管代理服务程序能够读取的形式存在。网管代理配置程序将配置信息写入到配置信息库,当网管代理启动时,从配置信息库中读取相关信


  上。解决方法是把管理信息存储在数据库文件中2,息,完成初始化工作。本IP电话系统中运行在Wi nNT2000下,我们把注册表作为配置信息库,将配置信息存放在注册表中,这样可以利用操作系统的安全机制保证配置信息的安全。


  五、结束语


  本文详细介绍了基于Agent++的IP电话系统中SNMP代理的实现,该系统的优点在于:(1)框架结构设计,开发流程简单易懂,具有很强的实用性;(2)代理-设备接口模块采用SNMP原语和代理服务程序通信,无需新的协议,适用性好;(3)这种实现方法可以应用于非VoIP系统中,对其它设备上的代理实现有很强的参考作用。


  与一些已经广泛应用的商用网管代理开发平台比较,本系统还有以下不足之处有待改进:(1)不支持动态加载管理模块。如果需要管理新的对象,只能重新编译代理程序。解决方法是把代理做为AgentX协议的子代理使用;(2)管理信息在封装代理程序内部。虽然这样可以保证数据的安全,查找速度也会很快,但无法在程序内部保存过多的数据,因此该框架不能应用在管理信息多的大型被管系统


  在Agent++中提供通用的API访问数据库,下一步将进行这方面的工作。


上一篇 下一篇