SNMP
SNMP原理与实践
解决的问题
网络规模越来越大,网络中不同种类、不同厂家、不同型号设备共存,网络管理繁琐低效
目的
实现设备统一管理,只要设备支持SNMP协议,网络管理员就可以统一纳入管理
版本
SNMPv1(1990)
优点
容易实现且成本低。
缺点
缺少大量读取数据的能力,没有足够的安全机制。
场景
适合规模较小,设备较少,安全性要求不高或本身就比较安全的网络,如校园网小型企业网。
SNMPv2(1996)
优点
扩充了 SNMPV1的功能,增加 Get Bulk和 inform操作。
GetBulk:实现了NMS对被管理设备的信息群查询。
Inform:被管理设备向NMS(Network Management System,网络管理系统)主动发送告警,需要NMS进行接收确认。
缺点
没有足够的安全机制。
场景
适合规模较大,设备较多安全性要求不高或本身就比较安全,但业务比较繁忙有可能发生流量拥塞的网络。
SNMPv3(1998)
优点
增加了身份验证和加密处理。新的SNMP体系结构,适应性强、方便管理、扩展性好。
适应性强:适用于多种操作环境,既可以管理最简单的网络,又能够满足复杂网络的 管理需求。
方便管理:SNMP框架体系由多个功能相对独立的子系统或应用程序集合而成,因而 可以很方便地对其进行管理。例如,若系统发生了故障,可以根据发生故障的功能类 型,定位到相应的子系统。
扩展性好:可以很方便地进行系统扩展。比如,为了应用新的安全协议,就可以在安 全子系统中为其定义单独的模块,从而在SNMP中支持该协议。
场景
适合各种规模,尤其是对安全性要求较高,只有合法的管理员才能对设备进行管理的网络。
概念
SNMP在执行Get、Set等基本操作时面临安全威胁, SNMP V3版本较v1,νc在安全性方面做了提升。
用户组( Group)
拥有特定安全级别属性的一个用户集合。
安全级别
- 1级:privacy(鉴权且加密
- 2级:authentication(只鉴权
- 3级:authentication(不鉴权不加密)
视图(view)
允许用户访问的mib节点集合。
SNMP3安全性增强
用户安全模块USM
(User- based Security Mode)
身份验证
Agen或NMS接到信息时首先必须确认信息是否来自有权限的NM5或λqent,并且信息在传输过程中未被改变。
数据加密
通过对称密钥系统,NMS和 Agent共享同一密钥对数据进行加密和解密。
VACM
基于视图的访问控制模块VACM(view- based Access Control model)
对用户组实现基于视图的访问控制。
基本概念
NMS
( Network Management System)
采用SNMP协议对网络设备进行管理的系统。
Agent
被管理设备中的一个代理进程,与NMS进行交互。
MIB
( Management information base)
MIB是一个数据库,指明了被管理设备所维护的变量(即能够被 Agent.查询和设置的信息)。
MIB在数据库中定义了被管理设备的一系列属性:
- 对象标识符( Object Identifier,OID)
- 对象的状态
- 对象的访问权限
- 对象的数据类型等
MIB给出了一个数据结构,包含了网络中所有可能的被管理对象的集合。因为数据结构与树相似,MIB又被称为对象命名树。
MIB的定义与具体的网络管理协议无关。设备制造商可以在产品(如路由器)中包含SNMP代理软件,并保证在定义新的MIB项目后该软件仍遵守标准。用户可以使用同一网络管理客户软件来管理具有不同版本MIB的多个路由器。若一台路由器上不支持此MIB,那么就无法 提供相应的功能。
MIB可以分为公有MIB和私有MIB两种。
公有MIB
一般由RFC定义,主要用来对各种公有协议进行结构化设计和接口标准化 处理。大多数的设备制造商都需要按照RFC的定义来提供SNMP接口。
私有MIB
是公有MIB的必要补充,当公司自行开发私有协议或者特有功能时,可以利用私有MIB来完善SNMP接口的管理功能,同时对第三方网管软件管理存在私有协 议或特有功能的设备提供支持。如华为公司企业节点为:1.3.6.1.4.1.2011
常见MIB节点
用于查询的节点
| OID | 节点名称 | 数据类型 | 最大访问权限 | 含义 |
|---|---|---|---|---|
| 1.3.6.1.2.1.2.1 | ifNumber | Integer | read-only | 系统中网络接口的数量(不关注接口当前状态 |
| 1.3.6.1.4.1.2011.5.25. 41.1.2.1.1.3 | hwlpAdEnt NetMmask | IpAddress | read- create | IP地址的子网掩码。 |
用于警告
| OID | 节点名称 | 绑定变量 | 含义 |
|---|---|---|---|
| 1.3.6.1.6.3.1.1.5.3 | linkDown | ifIndex ifAdminStatus ifOperStatus ifDesc | 经检测到由于 ifOperStatus节点对象已经从其他状态(但不是 notPresen状态)进入Down状态。这里的其他状态由 ifOperStatus的值显示。 |
访问权限
MIB节点的最大访问权限表明网管能够通过该MIB节点对设备进行的操作
- not-accessible:无法进行任何操作。
- read-only:可以读取信息。
- read-write:可以读取信息和修改配置。
- read-create:可以读取信息、修改配置、新增配置和删除配置。
变量
设备在生成告警时,不仅会上报当前发生的告警类型,同时会绑定一些变量。比如当发送接口linkDown告警时,需要同时绑定接口索引,接口的当前配置状态等变量。
- ifIndex:接口索引(编号)
- ifAdminStatus:管理状态,即接口是否被shutdown:1,undo shutdown;2, shutdown
- ifOperStasuts:接口当前的操作状态,即接口的链路层协议状态:1,Up;2,Down
- ifDesc:接口描述
Management object
被管理对象,如设备中的某个硬件(如接口板),也可以是在硬件或软件上配置的参数集合。
Device
被管理设备。
结构图
基本操作
PySNMP
高层接口架构
PySNMP高层接口组成如下图所示,实现SNMPV3基本操作涉及的类有SnmpEngine类,UsmUserData类, UdpTransportTarget类, ContextData类, Objectldentity类, ObjectType 类;
涉及的方法有getCmd , setCmd , nextCmd, bulkCmd , sendNotification ,本文只介绍 getCmd方法,其余方法的使用与其类似。
编码流程图

类
SnmpEngine类
PySNMP模块中的一个核心对象, PySNMP实现所有SNMP操作都涉及SnmpEngine类实例。
使用方法
1 | engine = SnmpEngine() |
UsmUserData
PySNMP模块对SNMPv3用户安全模块USM的实现。可以利用该类创建SNMPv3用户及其对应的认证与加密算法。
使用方法:
1 | userData= UsmUserData( |