基础环境
- 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
#
代码示例
# 导入高层 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.
关于Python技术储备
学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!
点此免费领取:CSDN大礼包:《python学习路线&全套学习资料》免费分享
一、Python所有方向的学习路线
Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、Python必备开发工具
四、Python视频合集
观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
五、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
六、Python练习题
检查学习结果。
七、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描CSDN官方认证二维码免费领取【保证100%免费】