前言
本人小白,由于一些学习上和项目上的实际需求,对SNMP协议进行了一些学习研究,主要应用于交通信号机和城市大脑。以下是本人的一些学习经验,如有错误,欢迎大家交流指正。
一、SNMP是什么?
1.SNMP介绍
SNMP是简单网络管理协议,其全称为simple network management Protocol。SNMP是一种简单网络管理协议,属于TCP/IP当中的应用层协议。主要用于网络设备的管理。
- 构成部分
SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。 - 历史版本
SNMP目前总共有三个版本,分别是V1,V2,V3。
SNMP v1是协议最初版本,安全性较差
SNMP v2通常被指是基于community的SNMP V2
SNMP v3是最新版本的SNMP。该版本最大的贡献为安全性
二、SNMP解读
1.实现结构
在具体实现上,SNMP为管理员提供了一个网管平台(NMS),又称为管理站,负责网管命令的发出、数据存储、及数据分析。被监管的设备上运行一个SNMP代理(Agent)),代理实现设备与管理站的SNMP通信。如下图
管理站与代理端通过MIB进行接口统一,MIB定义了设备中的被管理对象。管理站和代理都实现了相应的MIB对象,使得双方可以识别对方的数据,实现通信。管理站向代理申请MIB中定义的数据,代理识别后,将管理设备提供的相关状态或参数等数据转换为MIB定义的格式,应答给管理站,完成一次管理操作。
2.操作命令
SNMP协议提供了三种用于控制MIB对象的基本操作命令,分别为 Get、Set、Trap:
1.Get:管理站读取代理者处的某一对象的值。
2.Set:管理站设置代理者处的某一对象的值。
3.Trap:代理者主动向管理者报告的重要事件,主要包括设备损坏、意外事件等。
3.SNMP报文
SNMP协议定义了数据包的格式,网络管理员与管理代理之间的数据交换,还控制这管理代理的MIB数据对象。
一条SNMP消息包括三个部分,分别是“版本标识符”,“团体名”,“数据单元PDU”所构成
- 版本标识符 用于说明使用的SNMP协议版本
- 团体名 信息安全支持,常用public
- 协议数据单元PDU 这是SNMP协议当中的数据区,即SNMP报文中数据的载体。
PDU中的协议数据单元:
SNMP当中规定了5种协议数据单元,用于管理进程和进程之间的交换
- get-request操作: 从代理进程(目标)处获取一个或多个参数值
- get-next-request操作:从代理处获得下一个或多个使用的参数值
- set-request操作:设置代理进程中的一个或多个参数。
- get-response操作 :代理处收到请求后进行的相应操作,返回一个或多个参数值。
- trap操作:当有错误或故障发生时代理处主动向上一级上报的消息。
需要注意的是SNMP管理程序端口为162,SNMP代理程序端口为161。
4 SNMP报文格式
如下图所示,SNMP一共由三个部分组成,分别是公共SNMP首部,get/set首部,变量绑定
- 公共SNMP首部
共包括三个字段:
1.版本:写入值为当前版本号减一,如SNMP v1协议则填入0.
2.共同体: 共同体就是一个字符串,作为管理进程和代理进程之间的明文口令,常用的是6个字符“public”。
3.pdu类型。根据操作类型,填入0-4中的一个数字,对应关系如下表所示。
PDU类型 | 操作类型 |
---|---|
0 | get-request |
1 | get-next-request |
2 | set-request |
3 | get-response |
4 | trap |
- get/set首部
1.请求标识符:
这是由管理进程设置的一个整数值。主要用于代理进程识别消息顺序,进行response操作
2.差错状态:
由代理进程进行响应时填入0-5中的一个数字。具体内容如下表所示
3.差错索引:当出现noSuchName、badValue或readOnly的差错时,由代理进程在回答时设置的一个整数,它指明有差错的变量在变量列表中的偏移。
差错索引 | 名字 | 说明 |
---|---|---|
0 | coldstart | 代理进行了初始化 |
1 | warmstart | 代理进行了重新初始化 |
2 | linkDown | 一个接口从工作状态变为故障状态 |
3 | linkUp | 一个接口从故障状态变为工作状态 |
4 | authenticationFailure | 从SNMP管理进程接收到具有一个无效共同体的报文 |
5 | egpNeighborLoss | 一个EGP相邻路由器变为故障状态 |
6 | enterpriseSpecific | 代理自定义的事件,需要用后面的“特定代码”来指明 |
4.特定代码
知名代理自定义的事件(若trap类型为6),否则为0
5.时间戳
指明自代理进程初始化到trap报告的事件发生所经历的时间,单位为10ms
- 变量绑定
指明一个或多个变量的名和对应的值。
在get或get-next报文中,变量的值应忽略。
PDU (协议数据单元)是SNMP消息中的数据区, 即Snmp通信时报文数据的载体。
三、SNMP抓包分析
1.SNMP体验
SNMP协议的实现工具和方法有很多,本人使用snmptuil工具和一台Windows10平台的电脑进行模拟。
snmputil是一个汉化版的snmp集成工具
snmputil工具的命令规则是:snmputil [get|getnext|walk] agent community oid [oid …]
[get|getnext|walk]:为消息类型 包括get getnext walk
agent:指Snmp代理即你想进行操作的网络设备的ip或名称
community:分区域,即密码,默认是public
oid:想要操作的MIB数据对象号
SNMP获取系统版本:
OID: .1.3.6.1.2.1.1.1.0
实现命令:snmputil get loaclhost public .1.3.6.1.2.1.1.1.0
结果:
获取计算机连续开机多长时间:
OID:.1.3.6.1.2.1.1.3.0
实现命令:snmputil get loaclhost public .1.3.6.1.2.1.1.3.0
2.SNMP抓包分析
抓包软件使用wireshark对SNMP消息进行抓包
以下为SNMP获取系统版本:snmputil get loaclhost public .1.3.6.1.2.1.1.1.0所捕捉到的消息
18 00 00 即代表IPv6 Src: localhost, Dst: localhost
00 30 消息长度总共为48
11 Next Header: UDP (17)
80 Hop Limit: 128
00 00 00 00 00 00 00 00 00 00 00 01 Source Address: ::1(localhost)
00 00 00 00 00 00 00 00 00 00 00 01 Destination Address: ::1(localhost)
eb cd Source Port(发送端口): 60365
00 a1 Destination Port:(目标端口) 161
00 30 消息长度 48
de e4 Checksum: 0xdee4 [unverified]
以下为SNMP报文内容
30 26 02 01 00 04 06 70 75 62 6c 69 63
a0 19 02 01 01 02 01 00 02 01 00 30 0e 30 0C
06 08 2b 06 01 02 01 01 01 00 05 00
30 表示SNMP协议报文
26 消息长度为38个字节
02 01 00 协议版本v1 (前两个字节02表示INTEGER类型01是指1个字节长度)
04 参数类型(OCTSTR)
06 群体(community)名长度
70 75 62 6c 69 63 群体名public的assic码值
a0 PUD类型get-request
19 pdu的长度为25个OctStr(后面的内容31字节)
02 01 01 request ID
02 01 00 表示error-state为0
02 01 00 表示error-index为0
30 0e 表示后面变量绑定是SEQUENCE类型14个字节长度
30 0C 表示变量名1
06 表示该字段是OID类型
08 OID长度8字节
2b 06 01 02 01 01 01 00 1.3.6.1.2.1.1.1.0
05 00 表示NULL
get-response回复消息分析
18 00 00 即代表IPv6
60 03 d1 55 flow labell 03 d1 55
00 b8 消息长度184字节
11 Next Header: UDP (17)
80 Hop Limit: 128
00 00 00 00 00 00 00 00 00 00 00 01 Source Address: ::1(localhost)
00 00 00 00 00 00 00 00 00 00 00 01 Destination Address: ::1(localhost)
00 a1 Source Port(发送端口): 161
eb cd Destination Port:(目标端口) :60365
00 b8 消息长度184字节
le 63 Checksum: 0x1e63 [unverified]
以下为SNMP报文:
30 表示SNMP协议报文
81 消息长度为129个字节
02 01 00 协议版本v1
04 参数类型(OCTSTR)
06 群体(community)名长度
70 75 62 6c 69 63 群体名public的assic码值
a2 PUD类型get-response
81 pdu的长度为129个OctStr(后面的内容31字节)
9f
02 01 01 request id
02 01 00 表示error-state为0
02 01 00 表示error-index为0
30 81 表示后面变量绑定是SEQUENCE类型129个字节长度
93 30 81 90 表示变量名1
06 表示该字段是OID类型
08 OID长度8字节
2b 06 01 02 01 01 01 00 1.3.6.1.2.1.1.1.0
后续则表示
.Hardware: Intel64 Family 6 Mode
1158 Stepping 10 AT/AT COMPATIBLE - Software: Windows V ersion 6.3 (Build 19044Multipro cessor Free )文章来源:https://www.toymoban.com/news/detail-493540.html
总结
本文对SNMP的简单构造、消息类型、支持操作进行了简单介绍,然后使用snmputil进行了简单的snmp信息实例,并使用wireshark对消息进行了抓包,最后对SNMP消息进行分析,对SNMP消息进行了拆解,说明了各个部分的功能及作用。文章来源地址https://www.toymoban.com/news/detail-493540.html
到了这里,关于SNMP协议的了解与简单的抓包分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!