赞
踩
pysnmp 文档:官方文档,查看该模块所有的使用方法
h3c mib 库:华三官方提供的设备 MIB 库文件
mib 浏览器:可以用来查看 MIB OID 节点信息
路由器完成基础网络配置,开启了 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
#
# 导入高层 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)
上述代码输出内容如下,可以根据实际需求,对函数的返回内容进行处理,为方便实验,都使用了 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.
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。