本篇文章将重点分析SNMP报文,并对不同版本(SNMPv1、v2c、v3)进行区别!

四、SNMP协议数据单元

在SNMP管理中,管理站(NMS)和代理(Agent)之间交换的管理信息构成了SNMP报文,报文的基本格式如下图1:

图 1

SNMP主要有SNMPv1、SNMPV2c、SNMPv3几种最常用的版本。

1、SNMPv1

SNMPv1是SNMP协议的最初版本,提供最小限度的网络管理功能。SNMPv1的SMI和MIB都比较简单,且存在较多安全缺陷。

SNMPv1采用团体名认证。团体名的作用类似于密码,用来限制NMS对Agent的访问。如果SNMP报文携带的团体名没有得到NMS/Agent的认可,该报文将被丢弃。

报文格式如下图2:

图 2

从上图可以看出,SNMP消息主要由Version、Community、SNMP PDU几部分构成。其中,报文中的主要字段定义如下:

Version:SNMP版本

Community:团体名,用于Agent与NMS之间的认证。团体名有可读和可写两种,如果是执行Get、GetNext操作,则采用可读团体名进行认证;如果是执行Set操作,则采用可写团体名进行认证。

Request ID:用于匹配请求和响应,SNMP给每个请求分配全局唯一的ID。

Error status:用于表示在处理请求时出现的状况,包括noError、tooBig、noSuchName、badValue、readOnly、genErr。

Error index:差错索引。当出现异常情况时,提供变量绑定列表(Variable bindings)中导致异常的变量的信息。

Variable bindings:变量绑定列表,由变量名和变量值对组成。

enterprise:Trap源(生成Trap信息的设备)的类型。

Agent addr:Trap源的地址。

Generic trap:通用Trap类型,包括coldStart、warmStart、linkDown、linkUp、authenticationFailure、egpNeighborLoss、enterpriseSpecific。

Specific trap:企业私有Trap信息。

Time stamp:上次重新初始化网络实体和产生Trap之间所持续的时间,即sysUpTime对象的取值。

用Wireshark抓取的SNMPv1版本的报文格式如下图3:

图 3

192.168.2.1是Agent的ip地址,192.168.2.110是NMS的ip地址

从上图可以看到,SNMPv1版本的安全性不太好,可以抓取到community也即是团体名;tarp操作只有发送报文没有响应报文。

2、SNMPv2c

SNMPv2c也采用团体名认证。在兼容SNMPv1的同时又扩充了SNMPv1的功能:它提供了更多的操作类型(GetBulk和inform操作);支持更多的数据类型(Counter32等);提供了更丰富的错误代码,能够更细致地区分错误。

在v1版本中只有数据类型的错误码,而v2c版本中增加了不少,如下图4:

图 4

SNMPv2报文格式如下图5:

图 5

比较SNMPv1而言,SNMPv2c新增了GetBulk操作报文和inform操作报文。GetBulk操作所对应的基本操作类型是GetNext操作,通过对Non repeaters和Max repetitions参数的设定,高效率地从Agent获取大量管理对象数据。而inform操作也就是相当于Trap的升级操作,但是二者又有什么不同之处呢?Trap报文发出去之后不会收到响应报文,而inform报文在发出报文之后能收到响应报文。

抓取的报文格式如下:

(1)GetBulk操作,批量获取数据,如下图6:

图 6

(2)inform操作,可以看到它与trap操作的区别,有个响应报文,如下图7:

图 7

SNMPv2c修改了Trap报文格式。SNMPv2c Trap PUD采用SNMPv1 Get/GetNext/Set PDU的格式,并将sysUpTime和snmpTrapOID作为Variable bindings中的变量来构造报文(可参照上图3的get-next的response和下图9SNMPv2的trap进行对比),报文格式如下:

(1)SNMPv1版本的tarp报文格式如下图8:

图 8

(2)SNMPv2的trap报文格式如下图9:

图 9

3、SNMPv3

SNMPv3主要在安全性方面进行了增强,它采用了USM和VACM技术。USM提供了认证和加密功能,VACM确定用户是否允许访问特定的MIB对象以及访问方式。

USM(基于用户的安全模型)

USM引入了用户名和组的概念,可以设置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问;加密则是对NMS和Agent之间传输的报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为NMS和Agent之间的通信提供更高的安全性。

VACM(基于视图的访问控制模型)

VACM技术定义了组、安全等级、上下文、MIB视图、访问策略五个元素,这些元素同时决定用户是否具有访问的权限,只有具有了访问权限的用户才能管理操作对象。在同一个SNMP实体上可以定义不同的组,组与MIB视图绑定,组内又可以定义多个用户。当使用某个用户名进行访问的时候,只能访问对应的MIB视图定义的对象。

由于v3版本的增加了不少内容,所以决定在下一篇文章中再详细的讲解SNMPv3。

参考

SNMP学习笔记之SNMP报文以及不同版本(SNMPv1、v2c、v3)的区别的更多相关文章

  1. SNMP学习笔记之SNMP报文协议详解

    0x00 简介 简单网络管理协议(SNMP)是TCP/IP协议簇的一个应用层协议.在1988年被制定,并被Internet体系结构委员会(IAB)采纳作为一个短期的网络管理解决方案:由于SNMP的简单 ...

  2. SNMP学习笔记之SNMP TRAP简介、流程以及使用Python实现接受Trap信息

    0x00 SNMP TRAP简介 SNMP(Simple Network Management Protocol) trap是一种很有用,但是也容易让人难以理解的协议. 虽然名字叫做简单网络管理协议, ...

  3. SNMP学习笔记之SNMP 原理与实战详解

    原文地址:http://freeloda.blog.51cto.com/2033581/1306743 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法 ...

  4. SNMP学习笔记之SNMP简单概述

    0x00 SNMP简单概述 0.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理 ...

  5. SNMP学习笔记之SNMP的安装及Python的调用

    0x00 概述 本文是介绍SNMP在Windows和Linux(Ubuntu)下的安装,以及通过Python调用其接口的文章. 0x01 开发环境 Python 3.5.1 Windows 10 64 ...

  6. SNMP学习笔记之SNMPv3报文认证和加密

    下面主要的内容就是SNMPv3的加密和认证过程! USM的定义为实现以下功能: 鉴别 数据加密 密钥管理 时钟同步化 避免延时和重播攻击 1.UsmSecurityParameters(安全参数) 安 ...

  7. SNMP学习笔记之SNMP介绍,OID及MIB库

    1.1.    SNMP概览 SNMP的基本知识介绍简单网络管理协议(SNMP-Simple Network Management Protocol)是一个与网络设备交互的简单方法.该规范是由IETF ...

  8. SNMP学习笔记之SNMP树形结构介绍

    Basic command of SNMP: GET: The GET operation is a request sent by the manager to the managed device ...

  9. SNMP学习笔记之SNMP4J介绍(Java)

    0x00 SNMP4J介绍 SNMP4J是一个用Java来实现SNMP(简单网络管理协议)协议的开源项目.它支持以命令行的形式进行管理与响应.SNMP4J是纯面向对象设计与SNMP++(用C++实现S ...

随机推荐

  1. HDU 1789 - Doing Homework again - [贪心+优先队列]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 Time Limit: 1000/1000 MS (Java/Others) Memory Li ...

  2. hihocoder 1322 - 树结构判定 - [hiho一下161周][模板题/水题]

    题目链接:http://hihocoder.com/problemset/problem/1322 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个包含 N 个顶 ...

  3. python的笔记

    np.argsort(x):返回数据x从小到大的索引值,记住是一个索引值.当你想获取从小到大的数据的时候,用到这个 data[::-1]:对数据data进行倒转 a=[0,1,2,3,4,5] a[: ...

  4. 【Git 使用笔记】第一部分:安装git 和 使用git

    第一部分:安装git(本人使用ubuntu系统) sudo apt-get install git 第二部分:基本配置 git config core.filemode false//忽略文件属性的修 ...

  5. 02 - nginx - 反向代理、限速

    一.Nginx反向代理 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器. 代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中, ...

  6. 学习计划 mysql desc表结构分析

    在完成数据表建表后,我们需要知道我们的表结构是什么,有没有和构造表时差异的地方. -- 简单查看表结构 desc 表名 这里拿数据库的一张表中做示例 mysql> desc rental; +- ...

  7. Google Guava缓存实现接口的限流

    一.项目背景 最近项目中需要进行接口保护,防止高并发的情况把系统搞崩,因此需要对一个查询接口进行限流,主要的目的就是限制单位时间内请求此查询的次数,例如1000次,来保护接口. 参考了 开涛的博客聊聊 ...

  8. web 开发常见问题--GET POST 区别

    首先,get和post是什么? --两种 HTTP 请求方法:GET 和 POST HTTP Request Methods GET.POST 专业名称是 HTTP Request Methods.但 ...

  9. mysql 内置功能 存储过程 删除存储过程

    删除存储过程 drop procedure proc_name;

  10. 廖威雄: 思维导图:利用__attribute__((section()))构建初始化函数表与Linux内核init的实现

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/juS3Ve/article/details/79049404 本文具体解说了利用__attribut ...