snmp报文分析

上传人:简****9 文档编号:107231767 上传时间:2019-10-18 格式:DOC 页数:11 大小:51.62KB
返回 下载 相关 举报
snmp报文分析_第1页
第1页 / 共11页
snmp报文分析_第2页
第2页 / 共11页
snmp报文分析_第3页
第3页 / 共11页
snmp报文分析_第4页
第4页 / 共11页
snmp报文分析_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《snmp报文分析》由会员分享,可在线阅读,更多相关《snmp报文分析(11页珍藏版)》请在金锄头文库上搜索。

1、SNMP报文格式分析1.SNMP报文格式1.1 snmp简介1.1.1 snmp工作原理SNMP采用特殊的客户机/服务器模式,即代理/管理站模型。对网络的管理与维护是通过管理工作站与SNMP代理间的交互工作完成的。每个SNMP从代理负责回答SNMP管理工作站(主代理)关于MIB定义信息的各种查询。管理站和代理端使用MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现相应的MIB对象,使得双方可以识别对方的数据,实现通信。 管理站向代理请求MIB中定义的数据,代理端识别后,将管理设备提供的相关状态或参数等数据转换成MIB定义的格式,最后将该信息返回给管理站,完成一次管理操作。1

2、.1.2 snmp报文类型SNMP中定义了五种消息类型:Get-Request、Get-Response、Get-Next-Request、Set-Request和Trap 。1. Get-Request 、Get-Next-Request与Get-ResponseSNMP 管理站用Get-Request消息从拥有SNMP代理的网络设备中检索信息,而SNMP代理则用Get-Response消息响应。Get-Next- Request用于和Get-Request组合起来查询特定的表对象中的列元素。2Set-RequestSNMP管理站用Set-Request 可以对网络设备进行远程配置(包括设备

3、名、设备属性、删除设备或使某一个设备属性有效/无效等)。3. TrapSNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件的发生,如接口UP/DOWN,IP地址更改等。上面五种消息中Get-Request、Get-Next-Request和Set-Request是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap 是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是走UDP封装。1.1.3 snmp报文格式图SNMP报文的形式大致如下图所示。1.2 snmp报文编码格式SNMP(简单网络管理协议)是目前在计算

4、机网络中用得最广泛的网络管理协议,它使用ASN.1(Abstract Syntax Notation One抽象语法表示法.1)来定义SNMP报文格式和MIB(Management Information Base管理信息库)变量的名称。1.2.1 ASN.1ASN.1是一种描述数据和数据特征的正式语言,它和数据的存储及编码无关。根据ASN.1标准定义,数据类型分为: a.简单数据类型:boolean布尔值null空integer整型real实数octerstring八进制字符串object identifier对象标识ipaddressIP地址time ticks时刻值等。b.构造数据类型:

5、sequence序列sequence of setset ofchoice等。构造数据类型提供一种或多种简单数据类型进行复合的方法。1.2.2基本编码规则BER在具体系统中,我们需要用具体的编码规则将ASN.1语法表示的抽象数据转换成具体的比特流。SNMP使用的编码方法是BER(Basic Encoding Rule)。BER的数据都由三个域构成:标识域(tag) + 长度域(length) + 值域(value)。1. 标识域Tag表示:数据类型编码十六进制表示数据类型编码十六进制表示BOOL0x01INT0x02OCTSTR0x04NULL0x05OBJID0x06ENUM0x0ASEQ0

6、x30SETOF0x31IPADDR0x40COUNTER0x41GAUGE0x42TIMETICKS0x43OPAQUE0x44GET0xA0GETNEXT0xA1GETResp0xA2SET0xA3TRAP0xA42.长度域length表示长度域用于指示后续的值域value的字节数。但是这个长度域自身多长怎么确定呢?SNMP使用的是变长表示法,这有点类似与UTF8的编码方式。具体表示方法如下: (1)如果值域的长度在0到127字节之间,那么就是一个字节来表示,即第一个最高位为0的时候,其值就代表了值域的长度。 (2)如果值域的长度在127字节以上,那么第一个字节的第一个bit位(为1)就用

7、于指示值域的长度在127字节以上,后7个bit位(实际值)以及后续用于表示值域长度的字节数。 例如:值域长度(十进制)编码表示(十六进制)解释160x10在0到127之间,直接表示1600x81 0xA00x81的二进制为1000 0001第一位表示其超过127,低7位表示后续还有一个字节来表示值域字节数。0xA0表示值域的长度为160个字节。15000x82 0x05 0xDC第一个字节0x82表示后续还有两个字节表示值域长度,0x05DC的十进制值为1500因为绝大部分情况下,值域的长度都在【0,127】区间内,所有这种表示方法最节约。1.3 snmp报文介绍1.3.1 SNMP首部SNM

8、P报文的首部指明了这个报文是SNMP协议报文,以及报文的字节数。SNMP报文的第一个字节用于表示这是一个SNMP报文,就是0x30。在第一个字节之后是一个长度域,用于告知后面的SNMP报文的总字节数(不包括前面的0x30和这个长度域所占的字节数)。如下所示:0x30length后面的内容,字节数为length.标识域长度域值域1.3.2 SNMP版本表示前三个字节是SNMP版本的内容。0x02,0x01,0x01.0x02是标识域,表示的是值域类型为Integer0x01是长度域,表示后续值域的长度为1个字节0x01是值域,表示版本为SNMP v2c。SNMP版本编码(十六进制)V10x00V

9、2C0x01V30x021.3.3 Community共同体表示共同体部分这里一共占了8个字节。如:x04,0x06,0x70,0x75,0x62,0x6c,0x69,0x630x04是标识域,表示值域类型为(OCTSTR)0x06是长度域,表示值域的长度为6个字节70 75 62 6c 69 63是值域的内容,是群体名public的assic码值1.3.4 PUD表示这个部分内容比较多,但都是基于BER形式编码出来的。内容举例如下:a2 23 02 04 22 70 8b d4 02 01 00 02 01 00 30 15 30 13 06 0e 2b 06 01 04 01 8c a6

10、5e 01 01 01 01 01 00 02 01 2b1. PDU类型上面的第一个字节0xa2就是表示这个PDU的类型。见下表PDU类型编码名称0xA0get-request0xA1get-next-request0xA2get-response0xA3set-request0xA4trap(notification)0xA5GetBulk(SNMPv2增加)0xA6Inform(SNMPv2增加)2. PUD长度域0xa2后一个字节是这个PUD的长度域,0x23表示后面的值域是35个字节。3. get/set表示SNMP应该说是有三种操作,get/set/trap,又可细分为上面表格中的

11、5中PDU类型。其中get和set有共同之处,这里先以get的来做说明。(1)请求标识符Request ID这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出get报文,这些报文都使用UDP传送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文。举例:02 04 22 70 8b d40x02是标识域,表示值域为整型数据0x04是长度域,表示值域长度为4个字节0x22 70 8b d4是值域,就是一个整数而已。(577801172)(2)错误状态error-state错误状态是

12、用于告知管理进程,代理进程对其发出的请求的处理结果的状态的。举例:02 01 000x02是标识域,表示值域为整型数据0x01是长度域,表示值域长度为1个字节0x00是值域,表示没有出错错误状态的编码如下表所示:编码名字说明0noError一切正常1tooBig代理无法将回答装入到一个SNMP报文之中2noSuchName操作指明了一个不存在的变量3badValue一个set操作指明了一个无效值或无效语法4readOnly管理进程试图修改一个只读变量5genErr某些其他的差错(3)错误索引error-index当出现noSuchName、badValue或readOnly的差错时(见上表),

13、由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。举例:02 01 000x02是标识域,表示值域为整型数据0x01是长度域,表示值域长度为1个字节0x00是值域,因为没有出错,所以这里为01.3.5 变量绑定变量绑定就是跟在错误索引后面的一系列变量。这些变量同样也采取BER形式的编码规则。在get或get-next报文中,变量的值应忽略。1.3.6 trap(notification)PUD的类型如果不是上面的所述的get/set那就应该是trap(notification)类型了。trap部分的编码字节流大致如下分布形式:OIDtrap类型特定代码时间戳变量绑定1 O

14、ID:第一个部分是指trap报文对应的网络设备的对象标识符。此对象标识符肯定是在enterprise结点1.3.6.1.4.1下面的一棵子树上。2 trap类型此字段正式的名称是generic-trap,共分为下表中的7种。trap类型名字说明0coldStart代理进行了初始化1warmStart代理进行了重新初始化2linkDown一个接口从工作状态变为故障状态3linkUp一个接口从故障状态变为工作状态4authenticationFailure从SNMP管理进程接收到具有一个无效共同体的报文5egpNeighborLoss一个EGP相邻路由器变为故障状态6enterpriseSpecific代理自定义的事件,需要用后面的“特定代码”来指明3当使用上述类型2、3、5时,在报文后面变量绑定部分的第一个变量应标识响应的接口。4. 特定代码(specific-code)指明代理自定义的时间(若trap类型为6),否则为0。时间戳(timestamp)指明自代理进程初始化到产生trap报告的事件发生所经历的时间,例如时间戳为1230表明在代理初始化后1230ms发生了该时间。6.变量绑定(variable-bindings)指明一个或多个变量的名和对应的值。也是采用的BER编码规则。1.4 数据类型的编码

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号