您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 基于SNMP的MIB库研究
基于SNMP的MIB库访问实现摘要SNMP是用于网络管理/代理之间的请求/应答协议。管理信息库(MIB)定义了由代理者维护的各种变量,它们由管理者来进行存取操作,从而实现具体的网络管理。本文在对MIB的分析之后,给出了对MIB库变量访问的C语言程序实例.关键词简单网络管理协议,模型,信息库,访问实现1引言简单网络管理协议(SNMP)是Internet组织用来管理Internet的网络协议,随着Internet所使用的TCP/IP协议族成为事实上的网间网互连协议标准,SNMP也成为计算机网络管理方面大家实际遵循的标准。几乎所有的Internet网络设备的生产厂家都在开发与SNMP有关的产品并投放市场。2SNMP的管理模型在SNMP管理模型中有三个基本组成部分:管理者(Manager),被管代理(Agent)和管理信息库(MIB)。管理站一般是一个单机设备或一个共享网络中的一员,它是网络管理员和网络管理系统的接口,能将网络管理员的命令转换成对远程网络元素的监视和控制,同时从网上所有被管实体的MIB(管理信息库)中提取出信息数据。作为管理站,它还必须拥有能进行数据分析、故障发现等管理应用软件。整个管理站的管理工作是通过轮询代理来完成的。管理者可以通过SNMP操作直接与管理代理通信,获得即时的设备信息,对网络设备进行远程配置管理或者操作;也可以通过对数据库的访问获得网络设备的历史信息,以决定网络配置变化等操作。SNMP管理代理指的是用于跟踪监测被管理设备状态的特殊软件或硬件,每个代理都拥有自己本地的MIB。实际上,SNMP的管理任务是移交给管理代理来执行的。代理翻译来自管理站的请求,验证操作的可执行性,通过直接与相应的功能实体通信来执行信息处理任务,同时向管理站返回响应信息。3管理信息库MIB信息为网管中被管资源,而网络管理中的资源是以对象表示的,每个对象表示被管资源的某方面属性,这些对象形成了MIB库。每个MIB变量记录了每个相连网络的状态、通信量统计数据、发生差错的次数以及内部数据结构的当前内容等。网络管理者通过对MIB库的存取访问,来实现五大管理功能。3.1MIB对象定义格式ASN.1是一种用于描述结构化客体的结构和内容的语言,基于编码规则BER(BasicEncodingRules)是ASN.1标准定义的一种传送文法。每个MIB变量格式是SMI规定的,用ASN.1描述如下:OBJECTNAMEBOJECT-TYPEDESCRIPTION:(description)SYNTAX:(syntax)ACCESS:(access)STATUS:(status)::={(Parent)number}OBJECTNAME是被管对象的名字,ASN.1要求所有对象的名字在MIB中必须是唯一的;BOJECT-TYPE是每一个节点对象所必需的关键字;SYNTAX是被管对象类型的关键字,随后跟着的是一个类型(syntax);ACCESS是被管对象的访问方式关键字,在SNMP第二版中为MAX-ACCESS关键字,(access)是被管对象的访问方式,可为如下列举值之一:read-only、read-write、no-accessible,SNMP第2版中又增加了read-create;STATUS是被管对象关键字,(status)是被管对象的状态,如必备的、可选的或废弃的;DESCRIPTION是对被管对象的功能、特征等进行描述的关键字,(description)是被管对象的文本描述,在:::={(Parent)number}中,Parent表示位于MIB树中的父节点,number表示是第几个子节点。3.2MIB树每个MIB对象都用对象标识符(OID)来唯一的标识,这是用定义在ASN.1语法中的树型结构来组织的可用信息,其中每个可用信息是一个带标号的节点,每个节点用数字和字符两种方式显示,其中对象标识符OID是由句点隔开的一组整数,也就是从根节点通向它的路径,它命名节点并指示它在ASN.1树中的准确位置。一个带标号节点可以拥有包含其它带标号节点为它的子树,如果没有子树它就是叶子节点,它包含一个值并被称为对象。图3是带有ASN.1编号的MIB树实例:可以看出MIB-Ⅱ的OID是:1.3.6.1.2.1或者iso.org.dod.internet.mgmt.mib2。在SNMP中,实现应用到的MIB对象都是MIB-Ⅱ的子树节点。3.3MIB对象及变量InternetMIB是一树形结构的数据库,MIB-I定义了8个管理信息类别,MIB-Ⅱ是在MIB-I基础上的扩展,增加了SNMP和CMOT两项。MIB类别说明见表1。表1MIB类别表MIB类别包含有关信息System关于实体所在系统的数据Interface用于管理的网络接口信息AT地址转换信息IP网络协议ICMP为IP设备携带错误和控制的协议TCP传输控制协议UDP用户数据报协议EGP外部网关协议CMOT公共管理信息与服务协议SNMP简单网络管理协议MIB库中每一个变量都符合ASN.1语法规则,MIB库中只使用了ASN.1诸多类型中的INTEGER,OCTETSTRING,OBJECTIDENTIFIER,NULL作为基本类型,同时定义了IpAddress,Counter,Gauge,TimeTicks,Opaque类型,大体上说,MIB中变量可分为两大部分,简单变量(Simplevariable)和表格(Table)。简单变量是常见的整型及字符串,也包括一些数据集合,通过在变量的对象标识符末尾附加.0来引用。表格对应一组数组,可包含变量的多个实例,表格中的每个表项可以用多个字段,这些字段本身可能是简单变量也可能是表格,表格不能直接进行存取。4MIB访问实现4.1SNMP报文操作由于SNMP是工作在UDP上的协议,即无连接的报文通信方式,它不保证报文是否正确到达(SNMP的报文格式如图4所示)。与其他网络管理协议不同的是,SNMP使用一种称作“取—存”的范例来实现各种操作。主要有以下3种信息:(1)Get:由管理站去获取代理管理信息库的值,通过发送Get-Request,Get-Next–Request两种消息来实现。管理站通过发送Get-Request报文从拥有SNMP管理代理的网络设备中获取指定对象的信息,而管理代理用Get-Response报文来响应Get-Request报文。Get-Next-Request是获取一个表中指定对象的下一个对象,因此通常用它来获取一个表中的所有对象信息。(2)Set:由管理站设置代理的管理信息库的对象值,通过发送Set-request来实现,它可以对一个网络设备进行远程参数配置。VersionCommunitySNMPPDUSNMP消息PDUtypeRequest-id00Variable-bindingsGet-RequestPDU,Get-Next-RequestPDU,Set-RequestPDUPDUtypeRequest-idError-statusError-statusVariable-bindingsGet-ResponsePDUPDUtypeEnterpriseAgent-addrGeneric-trapSpecific-trapTime-stampVariable-bindingsTrapPDUName1Value1Name2Value2……..NamenValuen图4SNMP消息格式(3)Trap:使得代理能够向管理站通告重要事件,是属于非请求的消息,这些消息通知管理站发生了特定事件。Trap消息可以用来通知管理站线路的故障、连接的终端和恢复、认证失败等消息。一个SNMP实体在接收SNMP报文时,一般要进行基本的语法检查、版本号的验证、认证(若成功就以ASN.1的形式返回一个PDU)、对返回的PDU再进行语法检查。当所有的验证和语法解析成功以后,实体就选择适当的访问策略,对该PDU进行相应的处理。管理系统工作时,管理站周期性地发送Get-Request/Get-Next-Request报文来轮询各个代理,获取各个MIB中的管理信息,同时,管理站也接收代理发来的Trap报文,并记录在一个数据库中。网络管理员可以通过专用的应用软件从管理站上查看每个代理提供的管理信息。各个节点的代理程序驻留在工作站内存中,负责收集被管对象的网络状态信息。当代理接收到管理站的Get报文后,代理将根据请求的内容从本地MIB中提取所需信息,并以Get-Response报文方式将结果回送给管理站。代理一方面在161端口上(SNMP的默认端口)循环侦听来自管理站的Get-Request/Get-Next-Request报文,并做出相应的响应,读取或修改MIB中的变量值,将结果返回给管理站,另一方面,它也不断地检查本地的状态,适当地发送Trap报文。4.2MIB访问流程及原理首先根据自变量接收一个要访问的被管理对象主机名,并接收要查询的对象标识符的简略定义形式.过程首先生成SNMP报文,一旦报文生成,再把报文简单反转过来,发送出去.这其中要将请求标识符段内容及标识符长度保存起来,留待以后进行匹配检查.生成SNMP报文后,建立代理地址,创建套接字连接,以便代理能将响应发回.然后,启动警告信号处理器,将SNMP请求报文发给代理,等待一个响应的到来.因为SNMP是工作在UDP之上的,所以在SNMP应用实体间通信时,无需先建立连接,这样虽降低了系统开销,但UDP传输是不可靠的,为此,网络管理站采取了相应的超时和重发策略.本系统在发出请求报文之后,启动超时计数器,等待响应的到来,并设置重发次数为3.若3次之后仍没有收到响应,则关闭套接字,并返回一个“接收失败”错误代码.反之,若确定收到一个响应,则调用一过程来把响应转换成为内部表示形式,即对SNMP报文进行译码.再用已保存的Request-id与响应Request-id段进行比较,来验证这个报文是否是刚才发出的请求报文的响应.若是,就调用另一个过程,把每段对象标识符的ASN.1表示形式转换成自己的内部形式,并显示其值.由于SNMP报文对各个段都使用可变长度编码,这就使得即便是从SNMP报文中提取一简单整数段,也要进行许多计算,因而,所开发的系统原码程序中包含了一个语言较长、结构复杂的特殊句法分析程序,用于提取报文的各个段并进行译码,此句法分析软件必须把一指针移遍报文中所有各段,以找出各段长度并提取其数值.MIB访问的主流程图如下:4.3结合自己的开发经验,列举了访问MIB的一个具体实现以下介绍一个访问MIB库中SysDescr变量的程序。该程序在Stratus容错机(BSDUNIX4.3)上运行通过。读者根据这个例子不难编写对MIB库的其他变量的操作,从而实现一个具体的网络管理系统。#include〈stdio.h〉#include〈sys/types.h〉#include〈sys/socket.h〉#include〈netinet/in.h〉#include〈netdb.h〉#definesnmp_port161/*SNMPUDP端口号*/#definedestaddress“192.168.1.16”/*访问目标机的IP地址*/structsockaddr_indest;structhostent*hp;intsockfd;registerinti,n;intfromlen;intpacksize=43;u_charsendpack[100]={0x30,0x37,2,1,0,4,6,0x70,0x75,0x62,0x6c,0x69,0x63,0xa0,0x26,2,4,0,0,0,0,2,1,0,2,1,0,0x30,0x1c,0x30,0x0c,6,8,0x2b,6,1,2,1,1,1,0,5,0};/*get_request报文编码*/u_charrecvpack[150];/*收到get_response报文编码*/main(){if((hp=gethostbyname(destaddress))==0){pr
本文标题:基于SNMP的MIB库研究
链接地址:https://www.777doc.com/doc-2572096 .html