




免费预览已结束,剩余13页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
snmp报文格式分析1. snmp 报文格式1.1 snmp 简介1.1.1 snmp工作原理snmp 采用特殊的客户机 /服务器模式,即代理 /管理站模型。对网络的管理与维护是通过管理工作站与snmp 代理间的交互工作完成的。 每个 snmp 从代理负责回答 snmp 管理工作站(主代理)关于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-response精品资料snmp 管理站用 get-request 消息从拥有 snmp 代理的网络设备中检索信息,而 snmp 代理则用 get-response 消息响应。 get-next- request 用于和get-request 组合起来查询特定的表对象中的列元素。2. set-requestsnmp 管理站用 set-request可以对网络设备进行远程配置 (包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。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( 简单网络管理协议 )是目前在计算机网络中用得最广泛的网络管理协议,它使用 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. 构造数据类型 :sequence 序列sequence of set set ofchoice等。构造数据类型提供一种或多种简单数据类型进行复合的方法。1.2.2 基本编码规则 ber在具体系统中 ,我们需要用具体的编码规则将asn.1 语法表示的抽象数据转换成具体的比特流。snmp 使用的编码方法是ber(basic encoding rule)。ber 的数据都由三个域构成:标识域 (tag) +长度域 (length) +值域(value) 。1. 标识域 tag 表示:数据类型编码十六进制表示数据类型编码十六进制表示bool0x01int0x02数据类型编码十六进制表示数据类型编码十六进制表示octstr0x04null0x05objid0x06enum0x0aseq0x30setof0x31ipaddr0x40counter0x41gauge0x42timeticks0x43opaque0x44get0xa0getnext0xa1getresp0xa2set0xa3trap0xa42. 长度域 length 表示长度域用于指示后续的值域 value 的字节数。但是这个长度域自身多长怎么确定呢? snmp 使用的是变长表示法,这有点类似与 utf8 的编码方式。具体表示方法如下:(1) 如果值域的长度在0 到 127 字节之间,那么就是一个字节来表示,即第一个最高位为0 的时候,其值就代表了值域的长度。(2) 如果值域的长度在127 字节以上,那么第一个字节的第一个bit 位(为1)就用于指示值域的长度在127 字节以上,后 7 个 bit 位(实际值)以及后续用于表示值域长度的字节数。例如:值域长度(十进制 )编码表示解释(十六进制 )160x10在 0 到 127 之间,直接表示0x81 的二进制为1000 0001第一位表示其超过127 ,低 7 位表示1600x81 0xa0后续还有一个字节来表示值域字节数。0xa0 表示值域的长度为160个字节。15000x82 0x050xdc第一个字节0x82 表示后续还有两个字节表示值域长度,0x05dc的十进制值为1500因为绝大部分情况下,值域的长度都在【0,127 】区间内,所有这种表示方法最节约。1.3 snmp 报文介绍1.3.1 snmp首部snmp 报文的首部指明了这个报文是snmp 协议报文,以及报文的字节数。snmp 报文的第一个字节用于表示这是一个snmp 报文,就是 0x30 。在第一个字节之后是一个长度域,用于告知后面的snmp 报文的总字节数 (不包括前面的0x30 和这个长度域所占的字节数)。如下所示:0x30length后面的内容,字节数为length.0x30length后面的内容,字节数为length.标识域长度域值域1.3.2 snmp版本表示前三个字节是 snmp 版本的内容。 0x02,0x01,0x01. 0x02 是标识域,表示的是值域类型为integer0x01 是长度域,表示后续值域的长度为1 个字节0x01 是值域,表示版本为snmp v2c 。snmpv1版本编码 (十六进制 )0x00v2cv30x010x021.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 018c 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 ,又可细分为上面表格中的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错误状态是用于告知管理进程, 代理进程对其发出的请求的处理结果的状态的。举例: 02 01 000x02 是标识域,表示值域为整型数据0x01 是长度域,表示值域长度为1 个字节0x00 是值域,表示没有出错错误状态的编码如下表所示:编 码 名字说明0noerror一切正常编码名字说明1toobig代理无法将回答装入到一个snmp 报文之中2nosuchname操作指明了一个不存在的变量3badvalue一个 set 操作指明了一个无效值或无效语法4readonly管理进程试图修改一个只读变量5generr某些其他的差错(3) )错误索引 error-index当出现 nosuchname 、badvalue 或 readonly 的差错时 (见上表),由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。举例: 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. oid :第一个部分是指 trap 报文对应的网络设备的对象标识符。此对象标识符肯定是在 enterprise结点1.3.6.1.4.1 下面的一棵子树上。2. trap 类型此字段正式的名称是generic-trap ,共分为下表中的7 种。trap 类型名字说明0 coldstart代理进行了初始化1 warmstart代理进行了重新初始化2 linkdown一个接口从工作状态变为故障状态3 linkup一个接口从故障状态变为工作状态4 authenticationfailure从 snmp 管理进程接收到具有一个无效共同体的报文5 egpneighborloss一个 egp 相邻路由器变为故障状态6 enterprisespecific代理自定义的事件,需要用后面的“ 特定代码 ” 来指明3. 当使用上述类型2、3、5 时,在报文后面变量绑定部分的第一个变量应标识响应的接口。4. 特定代码 (specific-code)指明代理自定义的时间(若trap 类型为 6),否则为 0。时间戳 (timestamp)指明自代理进程初始化到产生trap 报告的事件发生所经历的时间,例如时间戳为 1230 表明在代理初始化后1230ms 发生了该时间。6.变量绑定 (variable-bindings)指明一个或多个变量的名和对应的值。也是采用的ber 编码规则。1.4 数据类型的编码表示下面介绍一些变量类型的编码表示方法。1.4.1 integer整型编码表示整型数据的标识域编码是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 内,直接编码表示,如果大于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 sequence组合类型sequence 表示其由多个数据组合而成,每一个数据也都还是采用的ber 编码方法。例如我们这里分析的数据包中就要一个sequence类型的数据,其值域又是有一个 oid 类型的数据和一个integer 类型的数据组合而成的。 见 2.1 实例。2. 分析报文2.1 get-next-request报文示例分析 (a.hex)先使用 hexdump来查看一下获取到的报文内容。 (hexdump是一个很好用的十六进制分析工具)oo-pc:/snmppud$ hexdump -c a.hex0000000030 2c 02 01 01 04 06 7075 62 6c 69 63 a1 1f 02|0,.public.|0000001004 22 70 8b d4 02 01 0002 01 00 30 11 30 0f 06|.p.0.0.|000000200000002e0b 2b 06 01 04 01 8c a65e 01 01 01 05 00|.+.|十六进制数据解释30表示 snmp 协议报文 (整个报文是一个sequence)2c消息长度44 字节(表示后面还有44 个字节的内容 )02 01 01协议版本 (2c)( 前两个字节02 表示 integer类型 01 是指 1 个字节长度, 最后的 01 是值 01)04参数类型 (octstr)06群体 (community)名长度7075626c69 63群体名 public 的 assic 码值a1pud 类型 get-next-request1fsnmp pdu的长度为 31 个 octstr( 后面的内容31 字节)十六进制数据解释020422708b d4请求标识符request id02 01 00表示 error-state为 002 01 00表示 error-index为 030 11表示后面变量绑定是sequence类型 17 个字节长度30 0f表示 (变量名 106表示该字段是oid 类型0boid 长度 11 字节2b060104011.3.6.1.4.1(标识 1.3 被合并为 2b)8c a6 5e201566 ( 这也是根据规则转换得到的)01 01 011.1.105 00表示 null2.2 get-response报文示例分析 (b.hex)报文内容:oo-pc:/snmppud$ hexdump -c b.hex0000000030 30 02 01 01 04 06 7075 62 6c 69 63 a2 23 02|00.public.#.|0000001004 22 70 8b d4 02 01 0002 01 00 30 15
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025呼伦贝尔扎兰屯市社会福利中心护理员招聘模拟试卷及一套答案详解
- 2025年上海复旦大学附属浦东实验学校教师招聘模拟试卷及答案详解1套
- 2025广西百色市凌云县新活力劳务有限责任公司工作人员招聘8人考前自测高频考点模拟试题有完整答案详解
- 2025河南郑州市第六人民医院招聘模拟试卷及1套参考答案详解
- 2025黑龙江牡丹江市东宁市环境卫生中心招聘公益性岗位2人考前自测高频考点模拟试题及一套完整答案详解
- 2025福建厦门市集美区实验小学顶岗教师招聘1人模拟试卷及答案详解(考点梳理)
- 2025广东社会科学大学招聘2人考前自测高频考点模拟试题及答案详解(易错题)
- 2025国网山西省电力公司博士后科研工作站招聘1人考前自测高频考点模拟试题及一套答案详解
- 2025湖北神农架优抚医院招聘医疗卫生专业技术人员模拟试卷及答案详解1套
- 2025年4月四川广安理工学院筹建处引进高层次人才17人模拟试卷附答案详解(典型题)
- 箱变应急预案与响应方案
- 肿瘤患者家庭肠内营养护理
- 《拒绝沉迷手机远离“垃圾快乐”》班会课件
- 沉井顶管施工方案
- 锅炉设备更换技术方案
- 班次调度冲突解决
- 管理会计学 第10版 课件 第1、2章 管理会计概论、成本性态与变动成本法
- 领导科学之领导用人(经典)
- 大米先生管理制度
- 手术室仪器设备管理PPT
- 高中政治课程标准解读
评论
0/150
提交评论