You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python实现带认证无加密的SNMPv3?pysnmp访问CISCO 2960报错

解决SNMPv3带认证无加密(pysnmp+Cisco 2960)的问题

错误原因分析

你遇到的MibNotFoundError是因为pysnmp默认缺少部分MIB文件,即使你请求的是SNMPv2-MIB::sysName,库在解析时可能依赖关联的IF-MIB,而该MIB未安装。

步骤1:安装缺失的MIB包

执行命令安装官方维护的pysnmp MIB集合:

pip install pysnmp-mibs

步骤2:修正SNMPv3认证配置

你的代码指定了加密协议但未提供加密密钥,不符合带认证无加密的需求。正确配置应仅保留认证相关参数:

修正后的代码:

from pysnmp.hlapi import UsmUserData, usmHMACSHAAuthProtocol
from pysnmp.hlapi import SnmpEngine, UdpTransportTarget, ContextData, ObjectType, ObjectIdentity, getCmd

# 替换为你的实际参数
snmpName = "your_snmp_username"
snmpPass = "your_auth_password"
ipHost = "switch_ip_address"

# 仅配置认证,不设置加密参数
auth = UsmUserData(
    userName=snmpName,
    authKey=snmpPass,
    authProtocol=usmHMACSHAAuthProtocol
)

# 执行SNMP GET请求
data = getCmd(
    SnmpEngine(),
    auth,
    UdpTransportTarget((ipHost, 161)),
    ContextData(),
    ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0))
)

errorIndication, errorStatus, errorIndex, varBinds = next(data)

if errorIndication:
    print(f"错误提示: {errorIndication}")
elif errorStatus:
    print(f"错误状态: {errorStatus.prettyPrint()} at {varBinds[int(errorIndex)-1] if errorIndex else '?'}")
else:
    for varBind in varBinds:
        print(f"{varBind[0].prettyPrint()} = {varBind[1].prettyPrint()}")

额外检查项

  • 确认Cisco 2960已配置SNMPv3用户:启用SHA认证、关闭加密,且用户拥有读取sysName等OID的权限。
  • 验证交换机与代码运行主机之间网络可达,UDP 161端口未被防火墙拦截。

内容的提问来源于stack exchange,提问作者Alchimie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 13:08:10