snmp报文分析

上传人:仙*** 文档编号:84698235 上传时间:2022-05-04 格式:DOC 页数:23 大小:190.50KB
返回 下载 相关 举报
snmp报文分析_第1页
第1页 / 共23页
snmp报文分析_第2页
第2页 / 共23页
snmp报文分析_第3页
第3页 / 共23页
点击查看更多>>
资源描述
SNMP 报文格式分析1.SNMP 报文格式1.1 snmp 简介1.1.1 snmp 工作原理SNM 采用特殊的客户机 /服务器模式,即代理 /管理站模型。对网络的管理 与维 护是通过管理工作站与 SNM 代理间的交互工作完成的。每个 SNMP 从代理负 责回 答 SNM 管理工作站(主代理)关于 MIB 定义信息的各种查询。管理站和代理端使用 MIB 进行接口统一, MIB 定义了设备中的被管理对象。 管理站和代理都实现相应的 MIB 对象,使得双方可以识别对方的数据,实现通信。管理站向代理请求 MIB 中定义的数据,代理端识别后,将管理设备提供的相 关 状态或参数等数据转换成 MIB 定义的格式,最后将该信息返回给管理站,完成 一次 管理操作。1.1.2 snmp 报文类型SNMP 中定义了五种消息类型: Get-Request 、 Get-Response 、 Get-Next- Request 、Set-Request 和 Trap 。1. Get-Request 、 Get-Next-Request 与 Get-ResponseSNMPt 理站用 Get-Request 消息从拥有 SNM 代理的网络设备中检索信息, 而 SNMP 代理则用 Get-Response 消息响应。 Get-Next- Request 用于和 Get-Request 组合起来查询特定的表对象中的列元素。2. Set-RequestSNM 管理站用 Set-Request 可以对网络设备进行远程配置(包括设备名、 设备 属性、删除设备或使某一个设备属性有效 /无效等)。3. TrapSNM 代理使用 Trap 向 SNM 管理站发送非请求消息,一般用于描述某一事件的发生,如接口 UP/DOWNIP 地址更改等上面五种消息中 Get-Request、Get-Next-Request 禾口 Set-Request 是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap是由代理进程 发给 管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是 走UDP 封装。1.1.3 snmp报文格式图SNM报文的形式大致如下图所示7P變亍嘏輻 3i2宇节 UJJb 報r8字节SNMP报文IF首部UBF首部SNMP首部get/set自0芟星创疋(0)英同FD1T矣型(03 5请喩标诣差诗伏态 05)索引名名值c 1XX11PDU类型C4J代理的IPfct址t: 严尢空特足代码时间at名名辰p首部中吏壘甥逗1.2 snmp报文编码格式SNMP简单网络管理协议)是目前在计算机网络中用得最广泛的网络管理协议,它使用 ASN.1 (Abstract Syntax Notation One抽象语法表示法.1)来定义SNM报文格式和 MIB ( Ma nageme nt In formation Base 管理信息库)变量的名 称。1.2.1 ASN.1它和数据的存储及编码无关ASN.1是一种描述数据和数据特征的正式语言,根据ASN.1标准定义,数据类型分为a.简单数据类型:boolean 布尔值null 空integer 整型real实数octerstri ng 八进制字符串object ide n tifier对象标识ipaddressIP 地址time ticks时刻值等。b.构造数据类型:seque nee 序歹 Useque nee of setset ofchoice 等。构造数据类型提供一种或多种简单数据类型进行复合的方法。1.2.2基本编码规则 BER在具体系统中,我们需要用具体的编码规则将ASN.1语法表示的抽象数据转换 成具体的比特流。SNM使用的编码方法是 BER(Basic Encoding Rule) 。BER的数据都由三个 域 构成:标识域(tag)+长度域(length)+值域(value)。1. 标识域Tag表示:数据类型编码十八进制表示数据类型编码十八进制表示BOOL0x01INT0x02OCTSTR0x04NULL0x05OBJID0x06ENUM0x0ASEQ0x30SETOF0x31IPADDR0x40COUNTER0x41GAUGE0x42TIMETICKS0x43OPAQUE0x44GET0xA0GETNEXT0xA1GETResp0xA2数据类型编码十八进制表示数据类型编码十八进制表示SET0xA3TRAP0xA42. 长度域length表示长度域用于指示后续的值域value的字节数。但是这个长度域自身多长怎么 确 定呢? SNM使用的是变长表示法,这有点类似与 UTF8的编码方式。具体表示 方 法如下:(1) 如果值域的长度在0到127字节之间,那么就是一个字节来表示,即第一个 最高位为0的时候,其值就代表了值域的长度。(2) 如果值域的长度在127字节以上,那么第一个字节的第一个bit位(为1) 就用于指示值域的长度在127字节以上,后7个bit位(实际值)以及后续用于表 示 值域长度的字节数。例如:值域长度(十进制)编码表示 (十八进制)解释16制)0x10在0到127之间,直接表示1600x81 0xA00x81的二进制为1000 0001第一位表示其超过 127,低7位表示后 续还 有一个字节来表示值域字节数。0xA0表示值域的长度为160个 字节。15000x82 0x050xDC第一个字节0x82表示后续还有两个字节表示值域长度,0X05DC的十进制值为1500因为绝大部分情况下,值域的长度都在【0,127】区间内,所有这种表示方法最节约。1.3 snmp报文介绍1.3.1SNMP 首部SNM报文的首部指明了这个报文是 SNM协议报文,以及报文的字节数。SNM报文的第一个字节用于表示这是一个 SNM报文,就是0x30。在第一个字节 之 后是一个长度域,用于告知后面的 SNMf报文的总字节数(不包括前面的0x30和这 个长度域所占的字节数)。如下所示:0x30len gth后面的内容,字节数为len gth.标识域长度域值域1.3.2 SNMP版本表示前三个字节是 SNM版本的内容。0x02,0x01,0x01.0x02是标识域,表示的是值域类型为Integer0x01是长度域,表示后续值域的长度为1个字节0x01是值域,表示版本为 SNMP v2cSNM版本编码(十八进制)V10x00V2C0x01V30x021.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 a65e 01 01 01 01 01 00 02 01 2b1. PDl类型上面的第一个字节0xa2就是表示这个PDU勺类型。见下表PDU 类型编码名称PDU类型编码名称OxAOget-request0xA1get- n ext-request0xA2get-resp onse0xA3 set-request0xA4trap ( no tificatio n )0xA5GetBulk ( SNMPv2 增力口)0xA6I )Inform (SNMPv2 增加)2. PUD长度域0xa2后一个字节是这个PUD勺长度域,0x23表示后面的值域是35个字节3. get/set 表示SNM应该说是有三种操作,get/set/trap,又可细分为上面表格中的5中PDU类型。其中get和set有共同之处,这里先以get的来做说明。(1) 请求标识符Request ID这是由管理进程设置的一个整数值。代理进程在发送get-response报文时也要返回此请求标识符。管理进程可同时向许多代理发出 get报文,这些报文都 使 用UDPf专送,先发送的有可能后到达。设置了请求标识符可使管理进程能够识别返回的响应报文对于哪一个请求报文。举例:02 04 22 70 8b d40x02是标识域,表示值域为整型数据0x04是长度域,表示值域长度为4个字节0x22 70 8b d4 是值域,就是一个整数而已。(577801172)(2) 错误状态 error-state错误状态是用于告知管理进程,代理进程对其发出的请求的处理结果的状态的。举例:02 01 000x02是标识域,表示值域为整型数据0x01是长度域,表示值域长度为1个字节0x00是值域,表示没有出错错误状态的编码如下表所示编码名字说明0n oError一切正常1tooBig代理无法将回答装入到一个 SNMP报文之中2no SuchName?操作指明了一个不存在的变量3badValue一个set操作指明了一个无效值或无效语法4readO nly管理进程试图修改一个只读变量5genErr某些其他的差错(3) 错误索弓丨error-i ndex当出现n oSuchNamebadValue 或read On ly的差错时(见上表),由代理进程 在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。举例:02 01 000x02是标识域,表示值域为整型数据0x01是长度域,表示值域长度为1个字节0x00是值域,因为没有出错,所以这里为01.3.5变量绑定变量绑定就是跟在错误索引后面的一系列变量。这些变量同样也采取BER形式的编码规则。在get或get -next报文中,变量的值应忽略。1.3.6 trap( notificatio n)PUD勺类型如果不是上面的所述的 get/set那就应该是trap(notification)类型了。trap部分的编码字节流大致如下分布形式:OIDtrap类型特定代码时间戳变量绑定,1OID:第一个部分是指trap报文对应的网络设备的对象标识符。此对象标识符肯定是在enterprise结点1.36141下面的一棵子树上。2. trap类型此字段正式的名称是gen eric-trap,共分为下表中的 7种。trap类型名字说明0coldstart代理进行了初始化1warmStart代理进行了重新初始化2in kDow n一个接口从工作状态变为故障状态3in kUp一个接口从故障状态变为工作状态4authe n ticati onF ailure从SNMP管理进程接收到具有一个无效共冋体的报文5egpNeighborLoss一个EGP相邻路由器变为故障状态6en terpriseSpecific代理自定义的事件,需要用后面的“特定代码”来指明3?当使用上述类型 2、3、5时,在报文后面变量绑定部分的第一个变量应标识响应的接口。4. 特定代码(specific-code)指明代理自定义的时间(若trap类型为6),否则为0。时间戳(timestamp)指明自代理进程初始化到产生trap报告的事件发生所经历的时间,例如时 间戳 为1230表明在代理初始化后1230ms发生了该时间。6.变量绑定(variable-bindings)指明一个或多个变量的名和对应的值。也是采用的BER编码规则。1.4数据类型的编码表示下面介绍一些变量类型的编码表示方法。1.4.1 In teger整型编码表示整型数据的标识域编码是0x02,长度域不定,一般是1/2/4字节等。整型数据的值域是带符号类型,最高位是符号位,采取补码的表示形式。要注意的是,其是大端表示法(高地址存低位)。1.4.2 0ID对象标识符编码表示SNMP艮务器维护的所有管理信息库(MIB)对象采用ObjectID表示, 如,1.36121.1.1表示MIB库中的设备描述SysDesc变量,其编码规则如下: 标识域编码为0x06,长度域根据情况而定,值域的编码比较复杂,如下所示。1 ?首两个ID被合并为一个字节X * 40+丫。例如:1.3 合并为 1x40+3 =43 = 0x2B2. 后续的ID,如果在区间1,127 内,直接编码表示,如果大于127,那么 按照下面(3)所述方法编码。3. 如果ID大于127,那么使用多个字节来表示。a. 这多个字节中除最后一个字节外,前面的字节最高位为1b. 这多个字节的最后一个字节的最高位为0c. 这里每个字节剩下的7个比特位用来表示实际的数值例如201566这个数,用十六进制表示是0x03 13 5e,那么用二进制表示是 000 1100010 0110101 1110。注意上面是以7个比特位为单位进行分划的,现在我们来填充最高位。将前面的最高位填1,最后一个最高位填0即可得到1000 1100 1010 0110 0101 1110用十六进制表示为0x8c a6 5e1.4.3 sequenee 组合类型seque nee表示其由多个数据组合而成,每一个数据也都还是采用的BER编码方法。例如我们这里分析的数据包中就要一个 sequenee类型的数据,其值域 又 是有一个0ID类型的数据和一个Integer类型的数据组合而成的。见 2.1实例。2.分析报文2.1 get-next-request报文示例分析(a.hex)先使用hexdump来查看一下获取到的报文内容。(hexdump是一个很好用的 十 六进制分析工具)oo-pc:/s n mpPUD$ hexdump -C a.hex00000000 30 2c 02 01 01 04 06 70 75 62 6c 69 63 a1 1f 02 |0,.public. 00000010 04 22 70 8b d4 02 01 00 02 01 00 30 11 30 0f 06 |.p0.0.|00000020 Ob 2b 06 01 04 01 8c a6 5e 01 01 01 05 00|.+ A?-|0000002e十六进制数据解释30表示SNMP协议报文(整个报文是一个 SEQUENCE )2c消息长度44字节(表示后面还有44个字节的内容)02 01 01协议版本(2c)(前两个字节02表示INTEGER类型01是指1个字节长度,最 后L/厶 w 1I的01是值01)04参数类型 (OCTSTR)06群体(community)名长度70 75 62 6c 6953群体名public的assic码值a1PUD 类型 get-next-request1fsnmp pdu的长度为31个OctStr (后面的内容31字节)02 04 22 70 8bd4请求标识符Request ID02 01 00表示 error-state为 002 01 00表示 error-index 为 030 11表示后面变量绑定是 SEQUENC E型17个字节长度30 0f表示(变量名106表示该字段是OID类型北OID长度11字节2b 06 01 04 011.36141(标识1.3被合并为2B)3c a6 5e201566 (这也是根据规则转换得到的)01 01 011.1.105 00表示NULL2.2 get-response报文示例分析(b. hex )报文内容:oo-pc:/s n mpPUD$ hexdump -C b.hex00000000 30300201 01 04 06 7075 62 6c 6963a223 02|00. -public.#00000010 0422708b d4 02 01 0002 01 00 301530 .13 06|.p0.0.|00000020 0e2b0601 04 01 8c a65e 01 01 01010100 02|.+ A.I|.+|00000030 01 2b00000032十六进制数据解释30表示SNMP协议报文(整个报文是一个 SEQUENCE )30消息长度48字节(表示后面还有48个字节的内容)02 01 01协议版本(2c)(前两个字节02 01表示INTEGER类型)04参数类型 (OCTSTR)06群体(community)名长度70 75 62 6c 69 63群体名public的assic码值a2PUD 类型 get-response23snmp pdu的长度为35个OctStr (后面的内容 31字节)02 04 22 70 8b d4请求标识符Request ID02 01 00表示 error-state为 002 01 00表示 error-index为 030 11表示后面变量绑定是 SEQUENC E型17个字节长度30 0f表示(变量名106表示该字段是OID类型0bOID长度11字节2b 06 01 04 011.36141 (标识1.3被合并为2B)8c a6 5e201566 (这也是根据规则转换得到的)01 01 011.1.100表示.0即第个头例(下面的值实际是节点1.36141.201566.1.1.1.0的)02 01 2b02 01表示INTEGER 类型1个字节,2b表示值(43)05 00表示NULL
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!