文章目录

  • 前言
  • 一、SNMP是什么?
  • 二、SNMP解读
    • 1.实现结构
    • 2.操作命令
    • 3.SNMP报文
    • 4 SNMP报文格式
  • 三、SNMP抓包分析
    • 1.SNMP体验
    • 2.SNMP抓包分析
  • 总结

前言

本人小白,由于一些学习上和项目上的实际需求,对SNMP协议进行了一些学习研究,主要应用于交通信号机和城市大脑。以下是本人的一些学习经验,如有错误,欢迎大家交流指正。

一、SNMP是什么?

1.SNMP介绍

SNMP是简单网络管理协议,其全称为simple network management Protocol。SNMP是一种简单网络管理协议,属于TCP/IP当中的应用层协议。主要用于网络设备的管理。

  1. 构成部分
    SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。
  2. 历史版本
    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首部,变量绑定

  1. 公共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
  1. 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

  1. 变量绑定

指明一个或多个变量的名和对应的值。
在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 )

总结

本文对SNMP的简单构造、消息类型、支持操作进行了简单介绍,然后使用snmputil进行了简单的snmp信息实例,并使用wireshark对消息进行了抓包,最后对SNMP消息进行分析,对SNMP消息进行了拆解,说明了各个部分的功能及作用。

SNMP协议的了解与简单的抓包分析相关推荐

  1. windows smb更改端口_SMB协议(使用说明+过程详解+抓包分析)

    一.SMB概述 SMB(ServerMessage Block)通信协议是微软(Microsoft)和英特尔(Intel)在1987年制定的协议,主要是作为Microsoft网络的通讯协议.SMB 是 ...

  2. Wireshark对pop3抓包分析

    本文主要使用Wireshark对邮件客户端使用POP3协议收取邮件的过程进行抓包分析并使用telnet命令进行简单操作. 1.POP3简介 邮局协议(英语:Post Office Protocol,缩 ...

  3. Wireshark对IMAP抓包分析

    本文主要使用Wireshark对邮件客户端使用IMAP协议接收邮件的过程进行抓包分析并使用telnet命令进行简单操作. 1.IMAP简介 IMAP和POP3两个协议基本上是目前支持和使用最广泛的邮件 ...

  4. iOS 之 Bonjour 协议简单抓包分析

    引子 因在学习iOS编程之bonjour编程的过程中,对bonjour产生了一些些的好奇,因此就查阅了各种资料以及自己抓包分析该协议. 注:文章作为个人学习记录,不一定准确,如有错误请多多指教,共同进 ...

  5. Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述

    Wireshark数据抓包分析(网络协议篇)第1章网络协议抓包概述 网络协议是用于不同计算机之间进行网络通信的.网络协议是网络上所有设备(如网络服务器.计算机.交换机.路由器等)之间通信规则的集合,它 ...

  6. UDP协议抓包分析 -- wireshark

    UDP协议抓包分析 – wireshark UDP是User Datagram Protocol用户数据报协议的简称.他是OSI七层模型中一种无连接的传输层协议,提供面向事务的简单的不可靠信息传送服务 ...

  7. 用Wireshark抓包分析协议 计算机网络

    此篇博客记录使用Wireshark抓包分析协议. 目录 一.DNS 二.分析TCP握手过程 三.TLS报文 四.HTTP协议 五.SMTP 六.ARP 七.RTP 八.RTMP 一.DNS DNS是域 ...

  8. 实战录 | 基于openflow协议的抓包分析

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...

  9. HTTP协议版本介绍以及使用Wireshark工具针对HTTP进行抓包分析详解

    一.http协议版本介绍 http:Hyper Text Transfer Protocol 超文本传输协议,是互联网应用最为广泛的一种网络协议,主要用于Web服务.通过计算机处理文本信息,格式为HT ...

最新文章

  1. mongodb 安装部署说明
  2. gis可达性分析步骤_这个 Python 项目厉害了!多个实战案例教你分析时空数据处理...
  3. Spring实现AOP的4种方式
  4. e影安全智能浏览器_【启耀玻璃】智能调光玻璃有什么特点? - 调光艺术玻璃|防火防弹玻璃|LOW-E节能玻璃|隔音隔热玻璃|特种安全玻璃|夹层中空玻璃-...
  5. Codeforces Round #506 (Div. 3) - C. Maximal Intersection (思维,模拟)
  6. 大专学计算机应用难吗,上了两年技校,专业是计算机应用,什么也没学到。现在想在去上个大专。学什么专业好呢。?...
  7. 纯手写实现HashMap
  8. C#编码简单性之函数篇(如何编写简短的C#代码,随时更新)
  9. HBase笔记整理(二)
  10. 在线sql服务器,SQL Server链接服务器
  11. 识别中文_中文场景文字识别大赛官方baseline
  12. 互联网金融学习总结(1)——互联网金融(ITFIN)概念相关学习
  13. 微信公众号开发 获取openid时报错40163:code been used问题的解决
  14. python中每个if条件后面都要使用冒号_每个if条件后面都要使用冒号。
  15. DELL笔记本E5400刷BIOS激活win7
  16. turtle(海龟)库的使用
  17. 区块链改革(链改)全国行动委员会第一次会议胜利召开
  18. 攻防世界-warmup详解
  19. GNN、GCN、GAT关系
  20. javascript判断元素是否已经focus

热门文章

  1. Golang 如何操作DB2的?
  2. 人工蜂群算法代码实现 python
  3. 惠普HP LaserJet Pro MFP M429fdw 打印机驱动
  4. 一探究竟:安信可模组ESP32-SU、ESP32-SL和ESP32-S对比,区别在哪里?
  5. python读取文件失败解决方案
  6. python读取文件中的一行
  7. SQL SERVER实验指导-课后作业
  8. 1069 微博转发抽奖 (20 分)(C语言)
  9. 多通道振弦传感器无线采集仪参数配置工具SETP简单介绍
  10. IP地址划分及子网掩码