snmp报文分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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-Response
SNMP t理站用Get-Request消息从拥有SNM代理的网络设备中检索信息,而SNMP代理则用Get-Response 消息响应。Get-Next- Request 用于和Get-Request 组合起来查询特定的表对象中的列元素。
2. Set-Request
SNM管理站用Set-Request可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。
3. Trap
SNM代理使用Trap向SNM管理站发送非请求消息,一般用于描述某一事
件的发生,如接口UP/DOWNIP地址更改等。
上面五种消息中Get-Request、Get-Next-Request 和Set-Request 是由管理站发送到代理侧的161端口的;后面两种Get-Response和Trap是由代理进程发给管理进程的,其中Trap消息被发送到管理进程的162端口,所有数据都是走UDP 封装。
1.1.3 snmp报文格式图
SNM报文的形式大致如下图所示。
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 ntifier 对象标识
ipaddressIP 地址
time ticks 时刻值等。
b.构造数据类型:
seque nee 序歹U
seque nee of set
set ofchoice 等。
构造数据类型提供一种或多种简单数据类型进行复合的方法。
1.2.2基本编码规则BER
在具体系统中,我们需要用具体的编码规则将ASN.1语法表示的抽象数据转换成具体的比特流。
SNM使用的编码方法是BER(Basic Encoding Rule) 。BER的数据都由三个域构成:标识域(tag)+长度域(length)+值域(value)。
1. 标识域Tag表示:
数据类型编码十八进制表示数据类型编码十八进制表示
BOOL0x01INT0x02
OCTSTR0x04NULL0x05
OBJID0x06ENUM0x0A
SEQ0x30SETOF0x31
IPADDR0x40COUNTER0x41
GAUGE0x42TIMETICKS0x43
OPAQUE0x44GET0xA0
GETNEXT0xA1GETResp0xA2
数据类型编码十八进制表示数据类型编码十八进制表示
SET0xA3TRAP0xA4
2. 长度域length表示
长度域用于指示后续的值域value的字节数。但是这个长度域自身多长怎么确定呢?SNM使用的是变长表示法,这有点类似与UTF8的编码方式。具体表示方法如下:
(1)如果值域的长度在0到127字节之间,那么就是一个字节来表示,即第一个最高位为0的时候,其值就代表了值域的长度。
(2)如果值域的长度在127字节以上,那么第一个字节的第一个bit位(为1)就用于指示值域的长度在127字节以上,后7个bit位(实际值)以及后续用于表示值域长度的字节数。
例如:
值域长度(十进制)
编码表示
(十八进
制)
解释
160x10在0到127之间,直接表示
1600x81 0xA00x81的二进制为1000 0001第一位表示其超过127,低7位表示后续还有一个字节来表示值域字节数。0xA0表示值域的长度为160个字节。
1500
0x82 0x05
0xDC
第一个字节0x82表示后续还有两个字节表示值域长度,0X05DC的
十进制值为1500
因为绝大部分情况下,值域的长度都在【0,127】区间内,所有这种表示方法最
节约。
1.3 snmp报文介绍
1.3.1SNMP 首部
SNM报文的首部指明了这个报文是SNM协议报文,以及报文的字节数。SNM报文的第一个字节用于表示这是一个SNM报文,就是0x30。在第一个字节之后是一个长度域,用于告知后面的SNMf报文的总字节数(不包括前面的0x30 和这个长度域所占的字节数)。如下所示: