• python net-snmp 的使用


             这一年一直在做一个综合管控平台的项目,用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关系图

     

     

    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树结构

     

    先上两个管理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 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()
  • 相关阅读:
    DataStructure期末复习小tips
    MediaPlayer
    Java中Calendar的用法
    C++小tips
    函数返回局部变量的问题
    framebuffer
    MTK gpio adb 控制 和 查看中断INDEX
    emmc
    No 'Access-Control-Allow-Origin' header is present on the requested resource.解决方法(亲测有效)
    JavaScript的Promise必须要会的几个点
  • 原文地址:https://www.cnblogs.com/zuoshoushizi/p/8191944.html
Copyright © 2020-2023  润新知