ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:29.29KB ,
资源ID:24500788      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/24500788.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(snmp报文分析.docx)为本站会员(b****2)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

snmp报文分析.docx

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

2、一次管理操作。1.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表示:数据类型编码十六进制表示数据类型编码十六进制表示BOOL0x01INT0x02OCTSTR0x04NULL0x05OBJID0x06ENUM

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

7、t位(为1)就用于指示值域的长度在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 S

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

9、)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 0

10、1 8c a6 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-st

12、ate错误状态是用于告知管理进程,代理进程对其发出的请求的处理结果的状态的。举例: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类型特定代码时间

14、戳变量绑定1 OID:第一个部分是指trap报文对应的网络设备的对象标识符。此对象标识符肯定是在enterprise结点1.3.6.1.4.1下面的一棵子树上。2 trap类型此字段正式的名称是generic-trap,共分为下表中的7种。trap类型名字说明0coldStart代理进行了初始化1warmStart代理进行了重新初始化2linkDown一个接口从工作状态变为故障状态3linkUp一个接口从故障状态变为工作状态4authenticationFailure从SNMP管理进程接收到具有一个无效共同体的报文5egpNeighborLoss一个EGP相邻路由器变为故障状态6enterpr

15、iseSpecific代理自定义的事件,需要用后面的“特定代码”来指明3当使用上述类型2、3、5时,在报文后面变量绑定部分的第一个变量应标识响应的接口。4. 特定代码(specific-code)指明代理自定义的时间(若trap类型为6),否则为0。时间戳(timestamp)指明自代理进程初始化到产生trap报告的事件发生所经历的时间,例如时间戳为1230表明在代理初始化后1230ms发生了该时间。6.变量绑定(variable-bindings)指明一个或多个变量的名和对应的值。也是采用的BER编码规则。1.4 数据类型的编码表示下面介绍一些变量类型的编码表示方法。1.4.1 Intege

16、r整型编码表示整型数据的标识域编码是0x02,长度域不定,一般是1/2/4字节等。整型数据的值域是带符号类型,最高位是符号位,采取补码的表示形式。要注意的是,其是大端表示法(高地址存低位)。1.4.2 OID对象标识符编码表示SNMP服务器维护的所有管理信息库(MIB)对象采用ObjectID表示,如,1.3.6.1.2.1.1.1表示MIB库中的设备描述SysDesc变量,其编码规则如下:标识域编码为0x06,长度域根据情况而定,值域的编码比较复杂,如下所示。1 首两个ID被合并为一个字节X * 40+Y。例如:1.3合并为1x40+3 =43=0x2B2后续的ID,如果在区间1,127内,

17、直接编码表示,如果大于127,那么按照下面(3)所述方法编码。3如果ID大于127,那么使用多个字节来表示。a.这多个字节中除最后一个字节外,前面的字节最高位为1b.这多个字节的最后一个字节的最高位为0c.这里每个字节剩下的7个比特位用来表示实际的数值例如201566这个数,用十六进制表示是0x03 13 5e,那么用二进制表示是000 1100010 0110101 1110。注意上面是以7个比特位为单位进行分划的,现在我们来填充最高位。将前面的最高位填1,最后一个最高位填0即可得到1000 11001010 01100101 1110用十六进制表示为0x8c a6 5e1.4.3 sequ

18、ence组合类型sequence表示其由多个数据组合而成,每一个数据也都还是采用的BER编码方法。例如我们这里分析的数据包中就要一个sequence类型的数据,其值域又是有一个OID类型的数据和一个Integer类型的数据组合而成的。见2.1实例。2.分析报文2.1 get-next-request报文示例分析(a.hex)先使用hexdump来查看一下获取到的报文内容。(hexdump是一个很好用的十六进制分析工具)oo-pc:/snmpPUD$ hexdump -C a.hex 00000000 30 2c 02 01 01 04 06 70 75 62 6c 69 63 a1 1f 02

19、 |0,.public.|00000010 04 22 70 8b d4 02 01 00 02 01 00 30 11 30 0f 06 |.p.0.0.|00000020 0b 2b 06 01 04 01 8c a6 5e 01 01 01 05 00 |.+.|0000002e十六进制数据解释30表示SNMP协议报文(整个报文是一个SEQUENCE)2c消息长度44字节(表示后面还有44个字节的内容)02 01 01协议版本(2c)(前两个字节02表示INTEGER类型01是指1个字节长度,最后的01是值01)04参数类型(OCTSTR)06群体(community)名长度70 75

20、62 6c 69 63群体名public的assic码值a1PUD类型get-next-request1fsnmp pdu的长度为31个OctStr(后面的内容31字节)02 04 22 70 8b d4请求标识符Request ID02 01 00表示error-state为002 01 00表示error-index为030 11表示后面变量绑定是SEQUENCE类型17个字节长度30 0f表示(变量名106表示该字段是OID类型0bOID长度11字节2b 06 01 04 011.3.6.1.4.1(标识1.3被合并为2B)8c a6 5e201566 (这也是根据规则转换得到的)01

21、01 011.1.105 00表示NULL2.2 get-response报文示例分析(b.hex)报文内容:oo-pc:/snmpPUD$ hexdump -C b.hex 00000000 30 30 02 01 01 04 06 70 75 62 6c 69 63 a2 23 02 |00.public.#.|00000010 04 22 70 8b d4 02 01 00 02 01 00 30 15 30 13 06 |.p.0.0.|00000020 0e 2b 06 01 04 01 8c a6 5e 01 01 01 01 01 00 02 |.+.|00000030 01 2

22、b |.+|00000032十六进制数据解释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表示后面变量绑定是SEQUENCE类型17个字节长度30 0f表示(变量名106表示该字段是OID类型0bOID长度11字节2b 06 01 04 011.3.6.1.4.1(标识1.3被合并为2B)8c a6 5e201566 (这也是根据规则转换得到的)01 01 011.1.100表示.0 即第一个实例(下面的值实际是节点1.3.6.1.4.1.201566.1.1.1.0的)02 01 2b02 01 表示INTEGER类型1个字节,2b表示值(43)05 00表示NULLWelcome ToDownload !欢迎您的下载,资料仅供参考!

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1