1 实验概括
- 实验目的
捕获SNMP报文,通过报文分析进一步理解SNMP的报文结构、MIB-2树的结构、理解管理信息结构SMI及其规定的ASN.1。
- 实验内容
1、自行挑选两个网管对象,分别使用get,get-next取其值。
2、使用抓包软件抓取数据包。
3、分析并验证SNMP协议数据:
1)SNMP协议的工作过程;
2)SNMP协议数据单元的格式;
3)MIB-2树的结构;
4)管理信息结构SMI及其规定的ASN.1。
- 实验要求
1、管理站与代理为不同机器。共有4个数据包:2个对象(分别用get、get-next)*2个包(request,response)=4个。
2、要分析其SNMP结构,指出语法定义、编码依据。对于后面的数据包,只要对新出现的结构类型进行分析即可,不需要重复分析。
3、独立完成分析工作。 4、撰写实验报告,给出实验小结,问题分析。实验课后5天提交。
2 报文分析
2.1 第一组报文
- 全况
2.1.1 get-request分析
- 全况
开始部分: 30 26
30: 表示这是一个构造类型(CONSTRUCTED),标记为序列(SEQUENCE),说明接下来的数据是一系列有序的元素。
26:表示这个序列的总长度为38字节(十六进制26转换为十进制是38,但注意长度字段是包括了自身长度的,所以实际内容长度要减去这两个字节)。
SNMP版本信息: 02 01 01
02: 表示这是一个整数类型(INTEGER)。
01: 这个整数的长度为1字节。
01: 表示SNMP版本号为1(Version 1),00(version 1),02(verison 3)
社区字符串(Community String): 04 06 70 75 62 6c 69 63
04: 表示这是一个OCTET STRING类型,即字节串。
06: 表示这个字符串的长度为6字节。
70 75 62 6c 69 63: 这是社区字符串的Ber编码,解码后为"public",这是SNMP中常用的只读访问权限的社区字符串。
PDU(Protocol Data Unit)开始: a0 19
a0: 表示这是一个上下文特定的标签(CONTEXT-SPECIFIC TAG),用于标记PDU的开始。
值 | 类型 |
---|---|
值为 0 | 表示 get-request 操作; |
值为 1 | 表示 get-next-request 操作; |
值为 2 | 表示 get-response 操作; |
值为 3 | 表示 set-request 操作; |
值为 7 | 表示 informRequest 操作。 |
19: 表示PDU的长度为25字节(十六进制19转换为十进制是25)。
PDU中的具体信息:
1、Request ID: 02 01 0d,表示请求ID为13(十进制)。
2、Error Status: 02 01 00,表示错误状态为0,意味着没有错误。
3、Error Index: 02 01 00,表示错误索引为0,也是无错误的指示,当出现 noSuchName、badValue 或 readOnly 的错误时,由代理进程在回答时设置的一个整数。该数值指明引起错误的变量在变量列表中的偏移位置。
4、Variable Bindings的开始: 30 0e,表示Variable Bindings的总长度为14字节(不包括自身长度标记)
- 30: 构造类型,序列。
- 0e: 长度为14字节。
5、单个Variable Binding
- 30 0c: 表示这是一个长度为12字节的序列,代表一个Variable Binding。
- 06 08 2b 06 01 02 01 01 05 00: 这是OID(Object Identifier)的Ber编码,解码后为.1.3.6.1.2.1.1.5.0,通常对应于系统描述(System Description)。
- 05 0e: 表示接下来是一个NULL类型的数据,长度为14字节,但在这种上下文中,它实际上指代的是值的缺失或者是一个空值,因为在SNMP中,查询请求常常不携带具体值。
2.1.2 get-response分析
- 全况
开始部分: 30 35
30: 表示这是一个构造类型(SEQUENCE),用于序列化多个元素。
35: 表示这个序列的总长度为53字节(十六进制35转换为十进制是53,包括了自身长度的两个字节)。
SNMP版本信息: 02 01 01
02: 整数类型(INTEGER)。
01: 长度为1字节。
01: SNMP版本为1。
社区字符串: 04 06 70 75 62 6c 69 63
04: OCTET STRING类型。
06: 长度为6字节。
70 75 62 6c 69 63: 解码后为"public",社区字符串。
PDU开始及类型变化: a2 28
a2: 上下文特定的标签,标记PDU开始,但与之前不同,这里的标签号暗示了这是一个SetRequest PDU(因为标签号2在SNMP中通常关联Set操作)。
28: PDU长度为40字节(十六进制28转换为十进制是40)。
SetRequest PDU中的信息:
1、Request ID: 02 01 0d,请求ID为13。
2、Error Status: 02 01 00,无错误。
3、Error Index: 02 01 00,错误索引为0。
4、Variable Bindings开始: 30 1d,长度为29字节(十进制)。
- 30: 构造类型,序列。
- 1d: 长度为29字节。
5、单个Variable Binding:
- 30 1b: 该Variable Binding的长度为27字节。
- 06 08 2b 06 01 02 01 01 05 00: OID编码,解码为.1.3.6.1.2.1.1.5.0,系统描述对象。
- 04 0f: 表示接下来是一个OCTET STRING类型的数据,长度为15字节(十进制)。
- 4c 41 50 54 4f 50 2d 41 43 38 48 45 37 35 34: 解码后的字符串为"LAPTOP-AC8HE754",这通常是设置的系统描述信息,这里表示一台计算机的主机名。
2.2 第二组报文
- 全况
2.2.1 get-next-request分析
- 全况
开始部分: 30 26
30: 表示构造类型(SEQUENCE),序列化多个元素。
26: 整个序列的总长度为38字节(十六进制26转换为十进制是38,包括自身长度的两个字节)。
SNMP版本信息: 02 01 01
02: 整数类型(INTEGER)。
01: 长度为1字节。
01: 表明SNMP版本为1。
社区字符串: 04 06 70 75 62 6c 69 63
04: OCTET STRING类型。
06: 长度为6字节。
70 75 62 6c 69 63: 解码为"public",社区字符串。
PDU开始及类型变化: a1 19
a1: 上下文特定标签,标志着PDU的开始。这里的标签号1表明这是一个GetNextRequest PDU(因为标签号1通常与GetNext操作相关联)。
19: PDU的长度为25字节(十六进制19转换为十进制是25)。
GetNextRequest PDU中的信息:
1、Request ID: 02 01 0f,请求ID为15。
2、Error Status: 02 01 00,无错误。
3、Error Index: 02 01 00,错误索引为0。
4、Variable Bindings开始: 30 0e,长度为14字节(十进制)。
- 30: 构造类型,序列。
- 0e: 长度为14字节。
5、单个Variable Binding:
- 30 0c: 表示Variable Binding的长度为12字节。
- 06 08 2b 06 01 02 01 07 02 00: OID编码,解码为.1.3.6.1.2.1.7.2.0,通常与IP转发表项相关。
- 05 00: 表示该Variable Binding的值部分为空(NULL类型),这是GetNextRequest中常见的,因为它请求的是下一个OID的值而不是提供一个具体的值。
2.2.2 get-response分析
- 全况
开始部分: 30 27
30: 表示构造类型(SEQUENCE),用于序列化多个元素。
27: 整个序列的总长度为39字节(十六进制27转换为十进制是39,包括自身长度的两个字节)。
SNMP版本信息: 02 01 01
02: 整数类型(INTEGER)。
01: 长度为1字节。
01: 表明SNMP版本为1。
社区字符串: 04 06 70 75 62 6c 69 63
04: OCTET STRING类型。
06: 长度为6字节。
70 75 62 6c 69 63: 解码为"public",社区字符串。
PDU开始及类型变化: a2 1a
a2: 上下文特定标签,标志着PDU的开始。这里的标签号2表明这是一个SetRequest PDU。
1a: PDU的长度为26字节(十六进制1a转换为十进制是26)。
SetRequest PDU中的信息:
1、Request ID: 02 01 0f,请求ID为15。
2、Error Status: 02 01 00,无错误。
3、Error Index: 02 01 00,错误索引为0。
4、Variable Bindings开始: 30 0f,长度为15字节(十进制)。
- 30: 构造类型,序列。
- 0f: 长度为15字节。
5、单个Variable Binding:
- 30 0d: 表示Variable Binding的长度为13字节。
- 06 08 2b 06 01 02 01 07 03 00: OID编码,解码为.1.3.6.1.2.1.7.3.0,这个OID表示udpInErrors。
- 41 01 01: 表示值部分,这里是一个APPLICATION类型的数据(由41开头),长度为1字节,值为01。表示接收到udp错误包的数量为1。