如何用不带auth no prv的python获取SNMPv3? 我试着用金龟子做这件事,但不起作用. 设备:交换机Cisco 2960

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

snmpName =username
snmpPass = password
ipHost = ipAddress

auth=UsmUserData(userName=snmpName,authKey=snmpPass,authProtocol=usmHMACSHAAuthProtocol,privKey='',privProtocol=usmAesCfb256Protocol)


data = getCmd(SnmpEngine(),auth,UdpTransportTarget((ipHost, 161)),ContextData(),ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysName', 0)))

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

当try 以任何方式打印此数据时,我都会出错 错误:

>>> errorIndication, errorStatus, errorIndex, varBinds = next(data)
Traceback (most recent call last):
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/builder.py", line 401, in loadModules
    self.loadModule(modName, **userCtx)
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/builder.py", line 377, in loadModule
    raise error.MibNotFoundError(
pysnmp.smi.error.MibNotFoundError: MIB file "IF-MIB.py[co]" not found in search path (DirMibSource('/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/mibs'), DirMibSource('/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/mibs/instances'), DirMibSource('pysnmp_mibs'), DirMibSource('/home/alchimie/.pysnmp/mibs'))

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/hlapi/asyncore/sync/cmdgen.py", line 108, in getCmd
    cmdgen.getCmd(snmpEngine, authData, transportTarget,
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/hlapi/asyncore/cmdgen.py", line 130, in getCmd
    vbProcessor.makeVarBinds(snmpEngine, varBinds), __cbFun,
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/hlapi/varbinds.py", line 39, in makeVarBinds
    __varBinds.append(varBind.resolveWithMib(mibViewController, ignoreErrors=False))
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/rfc1902.py", line 853, in resolveWithMib
    self.__args[0].resolveWithMib(mibViewController)
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/rfc1902.py", line 480, in resolveWithMib
    mibNode, = mibViewController.mibBuilder.importSymbols(
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/builder.py", line 441, in importSymbols
    self.loadModules(modName, **userCtx)
  File "/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/builder.py", line 410, in loadModules
    raise error.MibNotFoundError('%s compilation error(s): %s' % (modName, errs))
pysnmp.smi.error.MibNotFoundError: IF-MIB compilation error(s): missingcaused by <class 'pysnmp.smi.error.MibNotFoundError'>: MIB file "IF-MIB.py[co]" not found in search path (DirMibSource('/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/mibs'), DirMibSource('/home/alchimie/Documents/django/venv/lib/python3.10/site-packages/pysnmp/smi/mibs/instances'), DirMibSource('pysnmp_mibs'), DirMibSource('/home/alchimie/.pysnmp/mibs'))

推荐答案

您的错误消息表明您没有安装MIB文件.pysnmp的当前版本是lextudio,而不是这个one.请确保您已安装更新版本.

这是一些基于较新版本的pysnmp的伪代码,如果您仍然收到相同的错误,请让我知道.

from pysnmp.hlapi import *

host_ip_address = ''

authentication = UsmUserData(
    userName= 'your_user_name',
    authKey= 'your_password',
    authProtocol=usmHMACSHAAuthProtocol,
    privKey='your_private_key',
    privProtocol=usmAesCfb256Protocol
)


iterator = getCmd(SnmpEngine(),
                  authentication,
                  UdpTransportTarget((host_ip_address, 161)),
                  ContextData(),
                  ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))

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

if errorIndication:  # SNMP engine errors
    print(errorIndication)
else:
    if errorStatus:  # SNMP agent errors
        print('%s at %s' % (errorStatus.prettyPrint(), varBinds[int(errorIndex)-1] if errorIndex else '?'))
    else:
        for varBind in varBinds:  # SNMP response contents
            print(' = '.join([x.prettyPrint() for x in varBind]))

Python-3.x相关问答推荐

我没有';无法理解此TemplateDoesNotExist错误

Python GUI:tkinter应用程序作为Windows的实时桌面

我正在try 从 10*3 矩阵中删除随机值并将其变为 10*2 矩阵

以某种方式分割字符串

当我在正则表达式末尾使用斜杠时,为什么会得到不同的结果?

在REPLACE INTO中引用变量会抛出sqlite3.OperationalError

如何查找以开头并替换的字符串

通过 Pandas 通过用户定义函数重命名数据框列

安装没有 sudo 权限的 python3 和 pip3

为什么 return node.next 会返回整个链表?

删除重复项,但将值相加为一

通过 requests 库调用 API 获取访问令牌

判断是否存在大文件而不下载它

Python3 AttributeError:列表对象没有属性清除

django.core.exceptions.ImproperlyConfigured

python - 错误 R10(启动超时)-> Web 进程未能在启动后 60 秒内绑定到 $PORT

AttributeError:系列对象没有属性iterrows

在 WSL (Ubuntu) 中为 python3 安装 venv

如何使用 python http.server 运行 CGI hello world

使用 Python 3 读取 CSV 文件