SNMP快速学习文档.doc_第1页
SNMP快速学习文档.doc_第2页
SNMP快速学习文档.doc_第3页
SNMP快速学习文档.doc_第4页
SNMP快速学习文档.doc_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

SNMP快速学习文档快速学习文档软软件部学件部学习习文档文档2007-11-09Research&Development目录目录1.1SNMP简介.51.1.1名词解释.51.1.2版本号.51.1.3基本功能.51.1.4典型配置.51.1.5委托代理配置.62网络管理(核心)网络管理(核心).72.1管理信息库MIB.72.2协议数据单元PDU.92.2.1公共SNMP首部.112.2.2getset首部.112.2.3trap首部.122.2.4变量绑定(variable-bindings).132.3管理信息结构SMI.133ADVENTNETSNMPAPI学习学习.143.1概述.143.2特征.143.3使用心得.144SNMP编程流程编程流程.144.1发送请求消息.144.1.1AdventNetSNMP的初始化.154.1.2创建协议数据单元(PDUs).154.1.3发送信息.164.1.4资源的释放.164.2ADVENTNETSNMP接受响应消息.165参考参考.185.1SNMP中的数据类型详解:.185.2参考文献.201.1Snmp简介简介1.1.1名词解释名词解释简单网络管理协议(SNMP)是目前TCPIP网络中应用最为广泛的网络管理协议。1.1.2版本号版本号共三个版本1990SNMPv1,1993SNMPv2,1998SNMPv3。1.1.3基本功能基本功能SNMP的基本功能包括监视网络性能、检测分析网络差错和配置网络设备等。在网络正常工作时,SNMP可实现统计、配置和测试等功能。当网络出故障时,可实现各种差错检测和恢复功能。1.1.4典型配置典型配置图1是使用SNMP的典型配置。整个系统必须有一个管理站必须有一个管理站(managementstation),它实际上是网控中心。在每个被管对象中一定要有代理进程。管理进程和代理继承利用SNMP报文进行通信,而SNMP报文又使用UDP来传送。这些协议栈中带有阴影的部分是这些主机和路由器所具有的,而没有阴影的部分是为实现网络管理而增加的。1.1.5委托代理配置委托代理配置有时网络管理协议无法控制某些网络元素,例如该网络元素使用的是另一种网络管理协议。这是可使用委托代理(proxyagent)。委托代理能提供如协议转换和过滤操作的汇集功能。然后委托代理来对管理对象进行管理。图2表示委托管理的配置情况。2网络管理(核心)网络管理(核心)SNMP的网络管理由三部分组成,即管理信息库MIB、(协议数据单元PDU)SNMP本身以及管理信息结构SMI。2.12.1管理信息库管理信息库MIB管理信息库MIB指明了网络元素所包含的变量(即能够被管理进程查询和设置的信息)。MIB给出了一个网络中所有可能的被管理对象的集合的数据结构。SNMP的管理信息库采用和域名系统DNS相似的树型结构。图3画的是管理信息库的一部分,它又称为对象命名。最顶层为根,没有名字。对象命名树的顶级对象有三个,即ISO(标号1)、ITU-T(标号0)和这两个组织的联合体(标号2)。ISO的下面有4个结点,其中的一个(标号3)是被标识的组织。在其下面有一个美国国防部(DepartmentofDefense)的子树(标号是6).再下面就是Internet(标号是1)。讨论Internet中的对象时,只画出Internet以下的子树(图中带阴影的虚线方框),并在Internet结点旁边标注上即可。在Internet结点下面的第二个结点是mgmt(管理),标号是2。再下面是管理信息库mib-2,其标识为.2.1,或Internet(1).2.1。这种标识为对象标识符。mib将其所管理的信息分为8个类别见表1。现在mib-2所包含的信息类别超过40个。表1最初的结点mib管理的信息类别类别标号所包含的信息system(主机或路由器的操作系统interfacesaddresstranslationipicmptcpudpegp1)(2)(3)(4)(5)(6)(7)(8)各种网络接口及它们的测定通信量地址转换(例如ARP映射)Internet软件(IP分组统计)ICMP软件(已收到ICMP消息的统计)TCP软件(算法、参数和统计)UDP软件(UDP通信量统计)EGP软件(外部网关协议通信量统计)MIB的定义与具体的网络管理协议无关。MIB中的对象.4.1是全球唯一的。例如IBM为.4.1.2,Cisco为.4.1.9,Novell为.4.1.23等。世界上任何一个公司、学校只要用电子邮件发往进行申请即可获得一个结点名。这样各厂家就可以定义自己的产品的被管理对象名,使它能用SNMP进行管理。2.2协议数据单元协议数据单元PDUSNMPv1规定了5种协议数据单元PDU(也就是SNMP报文),用来在管理进程和代理之间的交换。管理进程向代理进程发出的管理进程向代理进程发出的get、get-next和和set操作:操作:get-request操作:从代理进程处提取一个或多个参数值get-next-request操作:从代理进程处提取紧跟当前参数值的下一个参数值set-request操作:设置代理进程的一个或多个参数值代理进程发给管理进程的:代理进程发给管理进程的:get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的,它是前面三种操作的响应操作。trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。图4描述了SNMP的这5种报文操作SNMPv2添加了几种PDU:Get-bulk操作(NMS高效检索大的数据块,如一个表中的多行),In操作(允许一个NMS向另一个发送trap,并检索它的响应)图5是封装成UDP数据报的5种操作的SNMP报文格式。一个一个SNMP报文三个部分组成,即报文三个部分组成,即公共公共SNMP首部、首部、getset首部首部trap首首部部、变量绑定、变量绑定。2.2.1公共公共SNMP首部首部共三个字段:版本(vesion)写入版本字段的是版本号减1,对于SNMP(即SNMPV1)则应写入0。共同体(community)作为管理进程和代理进程之间的明文口令,常用“public”。PDU类型:根据PDU的类型,填入04中的一个数字,其对应关系如表2所示。表2PDU类型名称0get-request1get-next-request2set-request3get-response4trapGet-bulkIn2.2.2getset首部首部请求标识符(requestID)管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文。差错状态(errorstatus)由代理进程回答时填入05中的一个数字,见表3的描述。差错状态名字说明0noError一切正常1tooBig代理无法将回答装入到一个SNMP报文之中2noSuchName操作指明了一个不存在的变量3badValue一个set操作指明了一个无效值或无效语法4readOnly管理进程试图修改一个只读变量5genErr某些其他的差错差错索引(errorindex)当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。2.2.3trap首部首部对象标识符:企业(enterprise)填入trap报文的网络设备的对象标识符.4.1.11。肯定是在图3的对象命名树上的enterprise结点.4.1下面的一棵子树上。trap类型:此字段正式的名称是generic-trap,共分为表4中的7种。表4trap类型描述trap类型名字说明0coldStart代理进行了初始化1warmStart代理进行了重新初始化2linkDown一个接口从工作状态变为故障状态3linkUp一个接口从故障状态变为工作状态4authenticationFailure从SNMP管理进程接收到具有一个无效共同体的报文5egpNeighborLoss一个EGP相邻路由器变为故障状态6enterpriseSpecific代理自定义的事件,需要用后面的“特定代码”来指明当使用上述类型2、3、5时,在报文后面变量部分的第一个变量应标识响应的接口。特定代码(specific-code)指明代理自定义的时间(若trap类型为6),否则为0。时间戳(timestamp)指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms。例如时间戳为1908表明在代理初始化后1908ms发生了该时间。2.2.4变量绑定变量绑定(variable-bindings)指明一个或多个变量的名和对应的值。在get或get-next报文中,变量的值应忽略。2.3管理信息结构管理信息结构SMISNMP中的数据类型:INTEGEROCTERSTRINGDisplayStringOBJECTIDENTIFIERNULLIpAddressPhysAddressCounterGaugeTimeTicksSEQUENCESEQUENDEOF具体的含义请看参考:SNMP中的数据类型详解3AdventNetSNMPAPI学习学习3.1概述概述AdventNetSNMPAPI为基于SNMP的网络管理应用提供开发工具包。3.2特征特征多语言支持:完全支持SNMPv1、SNMPv2c和SNMPv3稳健的SMIv1和SMIv2MIB解析器:无缝解析任何OEM供应商的MIB定义。MIB加载:可以选择从预编译文件、串行文件或数据库加载MIB文件以增强性能。IPv6(InternetProtocolVersion6):提供与基于IPv6和IPv4的设备之间的连通性。SNMP广播:面向网络广播SNMP数据包,从而自动发现网络中的SNMP设备。数据库支持:通过将MIB定义和SNMPv3配置数据存储到任何关系数据库(如MySQL和Oracle)增强了可伸缩性。MIBBrowser:它是用于网络和系统组件管理的工具,既可以作为独立的应用程序运行,又可以从Web浏览器调用。命令行工具:在远程代理上执行SNMP操作,如SNMPGET、SNMPGETNEXT、SNMPSET、SNMPBULK和SNMPWALK。3.3使用心得使用心得4SNMP编程编程流程流程AdventNetSNMPAPI按照SNMP协议封装了各种操作,包括PDU、VarBindList以及协议操作的各项函数。按照SNMP协议的描述,调用AdventNetSNMP相关函数,完成一次完整的SNMP。现在总结描述AdventNetSNMP的一般编程模式。4.1发送请求消息发送请求消息AdventNetSNMP发送请求消息的过程可以分为四个部分,主要有:AdventNetSNMP的初始化、PDUs的创建、发送信息以及资源的释放。4.1.1AdventNetSNMP的初始化的初始化(1)调用SnmpStartup函数启动AdventNetSNMP。(2)调用SnmpCreateSession函数创建一个会话session。(3)调用SnmpSetRetransmitMode函数设置重传模式。(4)调用SnmpSetRetry函数设置重传次数。(5)调用SnmpSetTimeout函数设置超时时间。4.1.2创建协议数据单元(创建协议数据单元(PDUs)在创建PDU之前,我们必须先创建变量绑定表(varbindlists)。(1)调用SnmpStrToOid函数创建读取对象的OID,例如,我们创建MIB变量ipInReceives(一个实例的OID为..0),代码:LPCSTRname=..0;smiOIDOidSnmpStrToOid(name&Oid);(2)调用SnmpCreateVbl函数创建变量绑定表。HSNMP_VBLm_hvbl=SnmpCreateVbl(session&OidNULL)NULL表示该OID的值为空(3)调用SnmpSetVb函数往变量绑定表中添加变量绑定,我们需先创建一个OID命名为Oid。SnmpSetVb(m_hvbl0&OidNULL);0表示往变量绑定表中添加变量绑定,非0值表示修改此位置的变量绑定创建好了变量绑定表后,我们调用SnmpCreatePdu函数创建协议数据单元,在这个函数中,我们必须设定error_index、error_status、request_id参数,它们都与协议中相应的量对应。HSNMP_PDUm_hpdu=SnmpCreatePdu(sessionSNMP_PDU_GETNULLNULLNULLm_hvbl)4.1.3发送信息发送信息调用SnmpStrToContext和SnmpStrToEntity函数创建共同体(community)字符串和代理entity。调用SnmpSendMsg函数发送信息。SnmpSendMsg(sessionNULLhAgenthViewm_hpdu);4.1.4资源的释放资源的释放释放所有分配的资源。4.2AdventNetSNMP接受响应消息接受响应消息SnmpCreateSession函数是AdventNetSNMP异步消息驱动模式的一个关键,它的函数原型:HSNMP_SESSIONSnmpCreateSession(HWNDhWndhandletothenotificationwindowUINTwMsgwindownotificationmessagenumberSNMPAPI_CALLBACKfCallbacknotificationcallbackfunctionLPVOIDlpClientDatapointertocallbackfunctiondata)它提供了两种方式的异步消息驱动,我们可以让AdventNetSNMP在有响应消息到达时发送一个消息给系统,也可以让它自动调用一个函数。笔者采用了第一种方式,实现如下:session=SnmpCreateSession(m_hWndwMsgNULLNULL)我们可以给消息wMsg创建一个消息处理函数,在这个函数里处理消息的接收、信息的提取与处理等事务。下面我们将具体描述AdventNetSNMP接受响应消息的步骤。(1)调用SnmpRecvMsg函数接收数据(2)调用SnmpGetPduData函数从PDU中析取出数据,(3)调用SnmpCountVbl获得变量绑定列表中变量绑定的个数(4)调用SnmpGetVb函数取得PDU变量绑定表中每个变量绑定的OID及其对应的值,可以指明该变量绑定在变量绑定表中的位置。参考实现如下:intnCount=SnmpCountVbl(varbindlist);for(intindex=1i=nCounti+)SnmpGetVb(varbindlistindex&Oidvaluei)其中,index指定了变量绑定的位置,valuei表示接收到的OID变量的值,是smiLPVALUE类型的,Oid表示接收到的变量绑定的OID。对于valuei,我们可以用selectcase语句,分别转换为字符串或整数类型。(5)调用SnmpOidToStr函数将Oid转换为字符串。并将接收到的Oid与发送数据包的各OID做比较,已决定各自值的归属。引用一段代码if(strcmp(m_sOidim_initOid1)=0)m_sDesr=strielseif(strcmp(m_sOidim_initOid2)=0)m_sSysOid=strielseif(strcmp(m_sOidim_initOid3)=0)m_sSysTime=strielseif(strcmp(m_sOidim_initOid4)=0)m_sName=strielseif(strcmp(m_sOidim_initOid5)=0)m_sIpin=strim_nIpin=nIpinelseif(strcmp(m_sOidim_initOid6)=0)m_sIpout=stri当比较发送的OID与接收到的OID时,就知道了这个stri是属于哪个OID的值,应当放在哪里显示,以m_s开头的变量都代表了不同的label这样,相应的值就在相应的字符串中显示。通过这样的步骤,就完成了一个简单的SNMP网络管理程序的设计。但是,在具体的应用中,应该考虑更多的问题,如内存管理、错误处理等问题。5参考参考5.15.1SNMP中的数据类型详解:中的数据类型详解:INTEGER一个变量虽然定义为整型,但也有多种形式。有些整型变量没有范围限制,有些整型变量定义为特定的数值(例如,IP的转发标志就只有允许转发时的或者不允许转发时的这两种),有些整型变量定义一个特定的范围(例如,UDP和TCP的端口号就从0到65535)。OCTERSTRING0或多个8bit字节,每个字节值在0255之间。对于这种数据类型和下一种数据类型的BER编码,字符串的字节个数要超过字符串本身的长度。这些字符串不是以NULL结尾的字符串。DisplayString0或多个8bit字节,但是每个字节必须是ASCII码。在MIB-II中,所有该类型的变量不能超过255个字符(0个字符是可以的)。OBJECTIDENTIFIERNULL代表相关的变量没有值。例如,在get或get-next操

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论