当前位置:   article > 正文

「Python 网络自动化」使用 pysnmp 查询 H3C 网络设备示例_pysnmp官方文档

pysnmp官方文档

「Python 网络自动化」系列文章总目录


pysnmp 文档:官方文档,查看该模块所有的使用方法

h3c mib 库:华三官方提供的设备 MIB 库文件

mib 浏览器:可以用来查看 MIB OID 节点信息

基础环境

  • Windows 10
  • python 3.8
  • pysnmp 4.4.12
  • HCL

网络拓扑

在这里插入图片描述

配置信息

路由器配置

路由器完成基础网络配置,开启了 v2c 和 v3 两个版本来进行实验

#
 snmp-agent
 snmp-agent community write simple private
 snmp-agent community read simple public
 snmp-agent sys-info version v2c v3
 snmp-agent group v3 netdevops authentication
 snmp-agent target-host trap address udp-domain 192.168.56.102 params securityname public
 snmp-agent usm-user v3 admin netdevops simple authentication-mode md5 Admin@h3c privacy-mode aes128 Admin@h3c
 snmp-agent trap enable
#
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
代码示例
# 导入高层 API
from pysnmp.hlapi import *

# 初始化引擎
engine = SnmpEngine()
# 选择 SNMP 协议,v1 和 v2c 只用团体字,使用 CommunityData 类实例化
# SNMPv1
# communityData = CommunityData('public', mpModel=0)
# SNMPv2c
communityData = CommunityData('public', mpModel=1)
# 如果是 v3,则需要用户凭证,使用 UsmUserData 类实例化,认证和加密算法与上面设备配置相对应
userData = UsmUserData(
    userName='admin',
    authKey='Admin@h3c',
    privKey='Admin@h3c',
    authProtocol=usmHMACMD5AuthProtocol,
    privProtocol=usmAesCfb128Protocol,
)
# 配置目标主机
target = UdpTransportTarget(('192.168.56.20',161))
# 实例化上下文对象
context = ContextData()

def getSysName(target):
    # ObjectIdentity 类负责 MIB 对象的识别。
    # 指定要查询的 OID 对象或名称
    sysname = ObjectIdentity("1.3.6.1.2.1.1.5.0")
    sysname1 = ObjectIdentity('SNMPv2-MIB','sysName',0)
    # 使用 ObjectType 类初始化查询对象
    obj1 = ObjectType(sysname)
    # 使用 getCMD 方法进行查询,返回结果是一个迭代器,需要使用 next() 来取值
    # 传递的参数均为为上面定义的变量,以 v2c 为例(如果是 v3,communityData 替换为 userData)
    g = getCmd(engine, communityData, target, context, obj1)
    # 取值
    _, _, _, result = next(g)
    # 打印输出
    for i in result:
        print(i)


def getIfaceList(target):
    """
    这个函数是查询接口列表,和上面查询 sysName 的区别是使用了 nextCmd 来获取一个 MIB 子树的全部内容
    主要是 `lexicographicMode=False` 参数,默认为 `True`,会一直查询到 MIB 树结束。
    """
    # 接口列表的 OID 值
    ifaceListOid = ObjectType(ObjectIdentity('1.3.6.1.2.1.2.2.1.2'))
    g = nextCmd(engine,userData,target,context,ifaceListOid,lexicographicMode=False)
    # 手动迭代并输出内容,并进行迭代器终止的判断
    try:
        while True:
            errorIndication, errorStatus, errorIndex, varBinds = next(g)
            for iface in varBinds:
                print(iface)
    except StopIteration:
        print('Get interface list done.')

getSysName(target)
print('============================')
getIfaceList(target)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60

上述代码输出内容如下,可以根据实际需求,对函数的返回内容进行处理,为方便实验,都使用了 print 来查看结果:

PS C:\python\netdevops> python "c:\python\netdevops\pysnmp_demo.py"
SNMPv2-MIB::sysName.0 = R1
============================
SNMPv2-SMI::mib-2.2.2.1.2.1 = GigabitEthernet0/0
SNMPv2-SMI::mib-2.2.2.1.2.2 = GigabitEthernet0/1
SNMPv2-SMI::mib-2.2.2.1.2.3 = GigabitEthernet0/2
SNMPv2-SMI::mib-2.2.2.1.2.4 = Serial1/0
SNMPv2-SMI::mib-2.2.2.1.2.5 = Serial2/0
SNMPv2-SMI::mib-2.2.2.1.2.6 = Serial3/0
SNMPv2-SMI::mib-2.2.2.1.2.7 = Serial4/0
SNMPv2-SMI::mib-2.2.2.1.2.8 = GigabitEthernet5/0
SNMPv2-SMI::mib-2.2.2.1.2.9 = GigabitEthernet5/1
SNMPv2-SMI::mib-2.2.2.1.2.10 = GigabitEthernet6/0
SNMPv2-SMI::mib-2.2.2.1.2.11 = GigabitEthernet6/1
SNMPv2-SMI::mib-2.2.2.1.2.129 = NULL0
SNMPv2-SMI::mib-2.2.2.1.2.130 = InLoopBack0
SNMPv2-SMI::mib-2.2.2.1.2.131 = Register-Tunnel0
Get interface list done.
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/156723
推荐阅读
相关标签
  

闽ICP备14008679号