snmp报文分析
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
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表示:
2.长度域length表示
长度域用于指示后续的值域value的字节数。但是这个长度域自身多长怎么确定呢?SNMP使用的是变长表示法,这有点类似与UTF8的编码方式。具体表示方法如下:
(1)如果值域的长度在0到127字节之间,那么就是一个字节来表示,即第一个最高位为0的时候,其值就代表了值域的长度。
(2)如果值域的长度在127字节以上,那么第一个字节的第一个bit位(为1)就用于指示值域的长度在127字节以上,后7个bit位(实际值)以及后续用于表示值域长度的字节数。
因为绝大部分情况下,值域的长度都在【0,127】区间内,所有这种表示方法最节约。
1.3 snmp报文介绍
1.3.2 SNMP版本表示
1.3.3 Community共同体表示
共同体部分这里一共占了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类型
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 d4
0x02是标识域,表示值域为整型数据
0x04是长度域,表示值域长度为4个字节
0x22 70 8b d4是值域,就是一个整数而已。(577801172)
(2)错误状态error-state
错误状态是用于告知管理进程,代理进程对其发出的请求的处理结果的状态的。举例:02 01 00
0x02是标识域,表示值域为整型数据