SNMP协议与netsnmp库使用
SNMP协议
SNMP基础概念
概述
- 简单网络管理协议(Simple Network Management Protocol),该协议能够支持网上管理系统,用以监测连接到网络上的设备的情况。它由一组网上管理的标准组成,包含应用层协议(基于UPD)、数据库模式(MIB库)和一组数据对象。
- 基本思想:统一不同设备、不同生产厂家、不同型号的设备的接口和协议。
SNMP系统的三大基本组件
- 网管系统(NMSs,Network-management systems):该应用程序监视并控制被管理的设备。
- 被管理的设备(managed device):每个被管理的设备都是一个节点,被管理的设备透过管理信息库(MIB)收集并存储管理信息,并且让网管系统能够透过SNMP代理者获取这项信息。
- 代理者(agent):是一种存在于被管理的设备中的网管软件模块。代理者控制本地机器的管理信息,以和SNMP兼容的格式发送这项信息。
SNMP协议的常见版本
SNMP通常支持多个版本:通常是SNMPv1、SNMPv2c和SNMPv3。
- SNMPv1:是SNMP协议的最初版本,提供最小限度的网络管理功能( 读、写MIB功能),存在较多安全缺陷(团体字可见于报文)。
- SNMPv2c:增加批量数据的获取(GetBulk操作),inform报文在发出报文之后能收到响应报文,仍使用团体字。(常用该版本)
- SNMPv3:主要在安全性方面进行了增强,USM技术提供了认证和加密功能,VACM技术确定用户是否允许访问特定的MIB对象以及访问方式。
Community的安全问题(SNMPv1与v2c)
- 分为:只读密码/只写密码
- 密码:纯明文传输
- SNMPv3:使用完整性校验、认证和加密提升了安全性
SNMPv3
- USM(基于用户的安全模型):USM引入了用户名和组的概念,可以设置认证和加密功能。认证用于验证报文发送方的合法性,避免非法用户的访问;加密则是对NMS和Agent之间传输的报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为NMS和Agent之间的通信提供更高的安全性。
- VACM(基于视图的访问控制模型):VACM技术定义了组、安全等级、上下文、MIB视图、访问策略五个元素,这些元素同时决定用户是否具有访问的权限,只有具有了访问权限的用户才能管理操作对象。在同一个SNMP实体上可以定义不同的组,组与MIB视图绑定,组内又可以定义多个用户。当使用某个用户名进行访问的时候,只能访问对应的MIB视图定义的对象。
MIB管理信息库
- 树状数据库
- 每个节点都有ID
- 每一个节点表示:一个可以查询的资源,如:CPU利用率、路由表、接口的IP地址表等等。
- 示例:ip结点下一个名字为ipInReceives的MIB变量(对应数字值为3)
-
该变量的名字:iso.org.dod.internet.mgmt.mib.ip.ipInReceives
-
其对象标识符OID(唯一标识某MIB对象):1.3.6.1.2.1.4.3
-
当网络管理协议在报文中使用MIB变量时,每个变量名后还要加一个后缀,以作为该变量的一个实例。如ipInReceives的实例数字表示为:1.3.6.1.2.1.4.3.0。(.0往往表示该节点的内容)
-
本机mib库示例
查看MIB库的软件
- OidView
- SnmpB
- 华为:官网下载 MIB文件 和 指南
- 思科:官网有 搜索工具(translate.browse/cisco mib locator)
SNMP常用操作
最基本的三种操作
- get:manager始发,想要看什么。
- set:manager始发,想要设置什么。
- trap:agent始发,告知manager一些情况。
- 默认端口号:
- manager始发的操作(get,set),使用UDP端口161
- agent始发的操作(trap),使用UDP端口162
- SNMP工作示意图
SNMP报文格式
- 一个SNMP报文共有三个部分组成,即公共SNMP首部、get/set首部/trap首部、变量绑定。
-
报文示例图
-
get-next-request
-
get-response
关注字段
- 版本:SNMP版本
- 共同体:团体字(community),类似密码
- 变量绑定(variable-bindings):oid节点名称 和 唯一标识符
SNMP七种操作
get-request
- 获取指定OID,只要一个信息
get-next-request
-
获取指定OID的下一个OID,以这样的方式获取该OID下的所有子节点,常用于获取表格信息
-
示例:有时候OID节点不是一个点,而是一个表。
-
子节点为一列
getBulkRequest
- 获取1个节点的所有子节点,效率比getnext更高。
get-response
- 响应请求,返回结果
- 报文中的value即为 某oid的结果内容
set-request
- 设置指定OID,要一个信息
trap
- 由agent始发,去往manager,用162端口
informRequest
- inform用于确认trap操作。
snmpwalk工具
- snmpwalk是SNMP的一个工具,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。
- snmpwalk -v 1或2c(代表SNMP版本) -c SNMP密码 IP地址 OID(对象标示符)
- –v:指定snmp的版本, 1或者2c,该参数必须有。
- –c:指定连接设备SNMP读密码,该参数必须有。
- IP:指定要walk的设备的IP地址,该参数必须有。
- OID:代表要获取设备的指标oid,该参数不是必须的。(默认:遍历所有OID)
- v3版本:参数不同
- 示例:snmpwalk -c public -v 2c 10.211.55.3 ifName
常用操作
snmpwalk
- 因为基于get-next,可以获取多种类型节点(点,列,表等)
- 对各种类型 标识码和节点名称,支持更好。
oid的几种转型
- .1.3.6.1.2.1.1.1.0
- .1.3.6.1.2.1.1.1
- 1.3.6.1.2.1.1.1
snmpget
- 专门 点状oid,必须加.0
- snmpget -c public -v 2c 10.211.55.3 sysDescr.0
snmptable
- 专门获取 表装节点,显示为 表状结构
- snmptable -c public -v 2c 10.211.55.3 ifXTable
snmpbulkget
- 基于snmp的getbulk操作
- snmpbulkget -c public -v 2c 10.211.55.3 .1.3.6.1.2.1.1
netsnmp-python库的使用
- 项目源码:netsnmp-python (1.0a1)
- 安装可能遇到的问题
代码示例
import netsnmp
# 建立会话
session = netsnmp.Session(Version=2, DestHost=host, Community=community, Timeout=3000000, Retries=1)
# 变量绑定
var_list = netsnmp.VarList(netsnmp.Varbind(oid))
# walk方法注意不写最后的 .0
res = session.walk(var_list)
# get方法获取单个点
res = session.get(var_list)
用法介绍
建立会话及参数
- Session方法:建立会话
- Version:协议版本选择
- DestHost:目标IP
- Community:团体字
- Timeout:超时设置(单位:微秒)
- Retries:重试次数
变量绑定
- Varbind可以绑定 变量名(ifIndex) 或 唯一标识符(.1.3.6.1.2.1.2.2.1.1),也可以组合使用。
- VarList可以绑定多个变量
- VarList中有一个变量错误,则List全部错误
常用方法
walk方法
- 类似snmpwalk,基于get-next操作,可以获取多种类型oid。
- 返回值:返回含有字符串的元组,失败则返回空元组。
- 注意:此方法的oid节点不要.0,同时无法访问 列节点的指定行(ifName.1)。
get方法
- 只能获取 点状oid。
- 返回值:返回含有字符串的元组,失败则返回含有None的元组。
- 注意:此方法的oid节点需要.0,可以访问ifName.1。
生产环境注意
- netsnmp库其所有返回值,只含有 节点内容部分。
- snmpwalk工具:则返回,变量名+完整节点,数据类型 和 节点内容。
- 需要端口索引与端口名称,访问 ifIndex 和 ifName。
- 端口索引与相关资源的oid内容可能有对应关系。
- 流量节点:IF-MIB::ifHCInOctets,IF-MIB::ifHCOutOctets是累计数据。
- 项目经验:流速=(现在数据-redis数据)/时间差
- 有些oid不是完整的累计数据,有些节点由 高字节 和 低字节数据 组合而成。
- 设备会有多个单板,使用什么槽位(单板),需要参考实际情况。
扩展与参考资料
- SNMP报文和5种操作详见:SNMP协议详解
- 不同版本(SNMPv1、v2c、v3)报文区别
- windows开启SNMP服务:windows7,windows8配置SNMP服务
- 使用snmpwalk采集设备的OID信息
- SNMP报文抓取与分析(一)
- snmpwalk命令常用方法
- 华为设备MIB参考