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—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、1
ASN、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表示: 数据类型 BOOL OCTSTR OBJID SEQ IPADDR GAUGE OPAQUE GETNEXT SET 编码十六进制表示 0x01 0x04 0x06 0x30 0x40 0x42 0x44 0xA1 0xA3 INT NULL ENUM SETOF COUNTER TIMETICKS GET GETResp TRAP 数据类型 编码十六进制表示 0x02 0x05 0x0A 0x31 0x41 0x43 0xA0 0xA2 0xA4 2、长度域length表示 长度域用于指示后续得值域value得字节数。但就是这个长度域自身多长怎么确定呢?SNMP使用得就是变长表示法,这有点类似与UTF8得编码方式.具
体表示方法如下:
(1)如果值域得长度在0到127字节之间,那么就就是一个字节来表示,即第一个最高位为0得时候,其值就代表了值域得长度。2( ?)如果值域得长度在127字节以上,那么第一个字节得第一个bit位(为1)就用于指示值域得长度在127字节以上,后7个bit位(实际值)以及后续用于表示值域长度得字节数. 例如: 值域长度编码表示(十进制) (十六进制) 16 160 0x10 0x81 0xA0 在0到127之间,直接表示 0x81得二进制为1000 0001第一位表示其超过127,低7位表示后续还有一个字节来表示值域字节数。0xA0表示值域得长度为160个字节。 解释 1500 0x82 0x05 第一个字节0x82表示后续还有两个字节表示值域长度,0x05DC0xDC 得十进制值为1500 因为绝大部分情况下,值域得长度都在【0,127】区间内,所有这种表示方法最节约。
1、3 snmp报文介绍 1、3、1 SNMP首部 SNMP报文得首部指明了这个报文就是SNMP协议报文,以及报文得字节数。 SNMP报文得第一个字节用于表示这就是一个SNMP报文,就就是0x30。在第一个字节之后就是一个长度域,用于告知后面得SNMP报文得总字节数(不包括前面得0x30与这个长度域所占得字节数)。如下所示: 0x30 标识域 length 长度域 后面得内容,字节数为length、、、、 值域 1、3、2 SNMP版本表示
前三个字节就是SNMP版本得内容。0x02,0x01,0x01、 0x02就是标识域,表示得就是值域类型为Integer 0x01就是长度域,表示后续值域得长度为1个字节 0x01就是值域,表示版本为SNMP v2c。
SNMP版本 编码(十六进制) V1 V2C V3 0x00 0x01 0x02 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 02 01 00 02 01 00 30 15 30 13 06 0e 2b 06 01 04 01 8c a6 5e 01 01 01 01 01 00 02 01 2b 1. PDU类型
上面得第一个字节0xa2就就是表示这个PDU得类型.见下表 PDU类型编码 名称 0xA0 0xA1 0xA2 0xA3 0xA4 0xA5 0xA6 get-request get—next-request get-response set—request trap(notification) GetBulk(SNMPv2增加) Inform(SNMPv2增加) 2. PUD长度域
0xa2后一个字节就是这个PUD得长度域,0x23表示后面得值域就是35个字节。
3. get/set表示