Search code examples
python-3.xsnmpcisco-ios

How to get SNMPv3 by python with auth no priv?


How to get SNMPv3 by python with auth no priv? i try to do it with pysnmp but it not work. device :switch 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)

I get Errors Whene try to print this data with any way Errors:

>>> 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'))

Solution

  • Your error message suggest that you don't have the MIB files installed. The current version of pysnmp is by lextudio and not this one. Please ensure that that you have the updated version installed.

    Here is some pseudocode based on the newer version of pysnmp Please let me know if you still get the same error.

    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]))
    
    

    edit: pypi link was malformed