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-Request
SNMP管理站用Set-Request可以对网络设备进行远程配置(包括设备名、设备属性、删除设备或使某一个设备属性有效/无效等)。
3.Trap
SNMP代理使用Trap向SNMP管理站发送非请求消息,一般用于描述某一事件得发生,如接口UP/DOWN,IP地址更改等.
上面五种消息中Get—Request、Get—Next—Request与Set—Reque st就是由管理站发送到代理侧得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、1
ASN、1就是一种描述数据与数据特征得正式语言,它与数据得存储及编码无关。
根据ASN、1标准定义,数据类型分为:ﻫ a、简单数据类型: boolean布尔值
null空
integer整型
real实数
octerstring八进制字符串
object identifier对象标识
ipaddressIP地址
time ticks时刻值等。
b、构造数据类型:
sequence序列
sequence ofset
set ofchoice等。
构造数据类型提供一种或多种简单数据类型进行复合得方法。
1、2、2基本编码规则BER
在具体系统中,我们需要用具体得编码规则将ASN、1语法表示得抽象数据转换成具体得比特流。
SNMP使用得编码方法就是BER(Basic Encoding Rule).BER得数据都由三个域构成:标识域(tag)+长度域(length) + 值域(value)。
长度域用于指示后续得值域value得字节数。
但就是这个长度域自身多长怎么确定呢?SNMP使用得就是变长表示法,这有点类似与UTF8得编码方式.具
体表示方法如下:
(1)如果值域得长度在0到127字节之间,那么就就是一个字节来表示,即第一个最高位为0得时候,其值就代表了值域得长度。
ﻫ (2)如果值域得长度在127字节以上,那么第一个字节得第一个bit 位(为1)就用于指示值域得长度在127字节以上,后7个bit 位(实际值)以及后续用于表示值域长度得字节数.
因为绝大部分情况下,值域得长度都在【0,127】区间内,所有这种表示方法最节约。
1、3 snmp 报文介绍 1、3、2 SN MP 版本表示
前三个字节就是SN MP版本得内容。
0x02,0x01,0x01、 0x02就是标识域,表示得就是值域类型为Integer 0x01就是长度域,表示后续值域得长度为1个字节 0x 01就是值域,表示版本为SNMP v 2c 。
1、3、3 munity共同体表示
共同体部分这里一共占了8个字节。
如:x04,0x06,0x70,0x75,0x62,0x6c,0x69,0x63
0x04就是标识域,表示值域类型为(OCTSTR)
0x06就是长度域,表示值域得长度为6个字节
70 75 62 6c 69 63就是值域得内容,就是群体名public得assic码值1、3、4 PUD表示
这个部分内容比较多,但都就是基于BER形式编码出来得。
内容举例如下:ﻫa2 23 02 04 22 70 8b d4 0201 00 02 01 00 3015 30 13 06 0e 2b 06 01 04 01 8ca6 5e 01 01 01 01 01 00 02 01 2b
1.PDU类型
2.PUD长度域
0xa2后一个字节就是这个PUD得长度域,0x23表示后面得值域就是35个字节。
3.get/set表示
SNMP应该说就是有三种操作,get/set/trap,又可细分为上面表格
当出现noSuchName、badValue或readOnly得差错时(见上表),由代理进程在回答时设置得一个整数,它指明有差错得变量在变量列表中得偏移。
举例:02 01 00
0x02就是标识域,表示值域为整型数据
0x01就是长度域,表示值域长度为1个字节
0x00就是值域,因为没有出错,所以这里为0
1、3、5 变量绑定
变量绑定就就是跟在错误索引后面得一系列变量。
这些变量同样也采取BER形式得编码规则.
在get或get—next报文中,变量得值应忽略。
1、3、6 trap(notification)
PUD得类型如果不就是上面得所述得get/set那就应该就是tra
1.OID:
第一个部分就是指trap报文对应得网络设备得对象标识符。
此对象标
识符肯定就是在enterprise结点{1、3、6、1、4、1}下面得一
棵子树上。
2.trap类型
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 = 0x2B
2.后续得ID,如果在区间[1,127]内,直接编码表示,如果大于127,那么按照下面(3)所述方法编码。
3.如果ID大于127,那么使用多个字节来表示。
a、这多个字节中除最后一个字节外,前面得字节最高位为1
b、这多个字节得最后一个字节得最高位为0
c、这里每个字节剩下得7个比特位用来表示实际得数值
例如201566这个数,用十六进制表示就是0x03 13 5e,那么用二进制表示就是000 1100 010 0110 101 1110。
注意上面就是以7个比特位为单位进行分划得,现在我们来填充最高位.
将前面得最高位填1,最后一个最高位填0即可得到
1000 11001010 0110 0101 1110
用十六进制表示为0x8c a6 5e
1、4、3 sequence组合类型
sequence表示其由多个数据组合而成,每一个数据也都还就是采用得BER编码方法.例如我们这里分析得数据包中就要一个sequence类型得数据,其值域又就是有一个OID类型得数据与一个Integer类型得数据组合而成得。
见2、1实例。
2、分析报文
2、1 get-next-request报文示例分析(a、hex)
先使用hexdump来查瞧一下获取到得报文内容。
(hexdump就是一个很
2、2 get—response报文示例分析(b、hex)。