这一年一直在做一个综合管控平台的项目,用python写的,项目春节前可能就要进行实际部署了和测试,趁着这个空闲期,回顾一下项目中用到的一些技术,第一个就是SNMP协议。

        项目结构主要是实现对ipran网络的监控和管理,工单派发等功能。ipran网络设备类似于交换机,路由器。反正可以把它们想象成这类设备,因为原理基本差不多,除了一些特定的功能。既然是监控管理,必不可少的就是性能采集了。采用的是snmp协议(简单网络管理协议)。

  先来个snmp的简介吧

1 SNMP

1.1  SNMP简介

SNMP(Simple Network Management Protocol,简单网络管理协议)是互联网中的一种网络管理标准协议,广泛用于实现管理设备对被管理设备的访问和管理。SNMP具有以下优势:

  • 支持网络设备的智能化管理。利用基于SNMP的网络管理平台,网络管理员可以查询网络设备的运行状态和参数,配置参数值,发现故障,完成故障诊断,进行容量规划和制作报告。
  • 支持对不同物理特性的设备进行管理。SNMP只提供最基本的功能集,使得管理任务与被管理设备的物理特性和联网技术相对独立,从而实现对不同厂商设备的管理。

1.1.1  SNMP的网络架构

SNMP网络架构由三部分组成:NMS、Agent和MIB。

  • NMS(Network Management System,网络管理系统)是SNMP网络的管理者,能够提供友好的人机交互界面,方便网络管理员完成大多数的网络管理工作。
  • Agent是SNMP网络的被管理者,负责接收、处理来自NMS的SNMP报文。在某些情况下,如接口状态发生改变时,Agent也会主动向NMS发送告警信息。
  • MIB(Management Information Base,管理信息库)是被管理对象的集合。NMS管理设备的时候,通常会关注设备的一些参数,比如接口状态、CPU利用率等,这些参数就是被管理对象,在MIB中称为节点。每个Agent都有自己的MIB。MIB定义了节点之间的层次关系以及对象的一系列属性,比如对象的名称、访问权限和数据类型等。被管理设备都有自己的MIB文件,在NMS上编译这些MIB文件,就能生成该设备的MIB。NMS根据访问权限对MIB节点进行读/写操作,从而实现对Agent的管理。

NMS、Agent和MIB之间的关系如图1-1所示。

图1-1 NMS、Agent和MIB关系图

 

 

python smb协议 python snmp_python

 

1.1.2  MIB和MIB视图

MIB以树状结构进行存储。树的每个节点都是一个被管理对象,它用从根开始的一条路径唯一地识别(OID)。如图1-2所示,被管理对象B可以用一串数字{1.2.1.1}唯一确定,这串数字是被管理对象的OID(Object Identifier,对象标识符)。

MIB视图是MIB的子集合,将团体名/用户名与MIB视图绑定,可以限制NMS能够访问的MIB对象。当用户配置MIB视图包含某个MIB子树时,NMS可以访问该子树的所有节点;当用户配置MIB视图不包含某个MIB子树时,NMS不能访问该子树的所有节点。

图1-2 MIB树结构

 

python smb协议 python snmp_网络设备_02

先上两个管理snmp的工具

snmpwalk

snmpwalk是一个SNMP小程序,它使用SNMP的GETNEXT请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。

安装方法:

我自己电脑是windows的,实际工作是linux的

snmpwalk没有单独的安装包,它被包含在net-snmp软件包中的,所以我们只需要安装net-snmp软件包就可以得到snmpwalk。

windows直接去网上下载安装,跟安装平常软件没有什么区别

使用方法:

snmpwalk -v 2或3(代表SNMP版本) -c SNMP读密码 IP地址 OID(对象标示符)

参数选项

–h:显示帮助。

–v:指定snmp的版本, 1或者2c或者3。

–c:指定连接设备SNMP密码。

–V:显示当前snmpwalk命令行版本。

–r:指定重试次数,默认为0次。

–t:指定每次请求的等待超时时间,单为秒,默认为3秒。

–l:指定安全级别:noAuthNoPriv|authNoPriv|authPriv。

–a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。

–A:验证字符串。只有-l指定为authNoPriv或authPriv时才需要。

–x:加密协议:DES。只有-l指定为authPriv时才需要。

–X:加密字符串。只有-l指定为authPriv时才需要。

 

另外一个是MIB Brower

    iReasoning MIB浏览器是一个强大和易于使用的工具由iReasoning SNMP API提供支持。 MIB浏览器是工程师管理启用SNMP的网络设备和应用程序不可或缺的工具。 它允许用户加载标准的,专有的MIB,甚至一些错误的MIB。 它还允许它们发出SNMP请求以检索代理的数据,或对代理进行更改。 内置陷阱接收器可以根据其规则引擎接收和处理SNMP陷阱。

下载地址:http://www.ireasoning.com/download.shtml

 这个使用比较简单,只要填入HOST Address 和 OID 就能获取信息了

 

python操作SNMP

 用python获取snmp信息有多个现成的库可以使用,其中比较常用的是netsnmppysnmp两个库。网上有较多的关于两个库的例子。

我们选择的是netsnmp,python的netsnmp,其实是来自于net-snmp包。官网:http://www.net-snmp.org/download.html

在你下载的安装包里有个python的目录,那就是python的netsnmp

python smb协议 python snmp_python smb协议_03

 

 切换到目录下

python setup.py install 安装就可以了

      

最后来一个小例子,展示一下netsnmp的用法



# -*- coding: utf-8 -*-
 
 
import netsnmp
 
 
class Snmp(object):
    """
    SNMP
    """
    def __init__(self, oid="sysDescr", version=1, destHost="localhost", community="public"):
        self.oid = oid
        self.version = version
        self.destHost = destHost
        self.community = community
 
    @property
    def query(self):
        """
        获取snmp信息
        """
        try:
            result = netsnmp.snmpwalk(self.oid,
                                      Version=self.version,
                                      DestHost=self.destHost,
                                      Community=self.community)
        except Exception as e:
            result = None
        return result
 
 
def main():
   #oid 填写name或oid号是等效的
    test_obj = SnmpClass(oid="1.3.6.1.4.1.9966.2.201.6.11.11", destHost="192.168.10.121")
    print test_obj.query
 
if __name__ == '__main__':
    main()