0

I cannot seem to get this script to work. Any help is greatly appreciated.

Here's the error I keep getting:

./snmptester.py
Traceback (most recent call last):
  File "./snmptester.py", line 35, in <module>
    cmdgen.MibVariable(mib, oid),
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 370, in getCmd
    kwargs.get('contextName', null)
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 207, in getCmd
    self.makeReadVarBinds(varNames),
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 150, in makeReadVarBinds
    self.mibViewController, oidOnly=True
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/mibvar.py", line 160, in resolveWithMib
    self.__modName, self.__symName
  File "/usr/lib/python2.6/site-packages/pysnmp/smi/builder.py", line 298, in importSymbols
    'No symbol %s::%s at %s' % (modName, symName, self)
pysnmp.smi.error.SmiError: No symbol CISCO-REMOTE-ACCESS-MONITOR-MIB::ciscoRasMonitorMIBObjects.crasActivity.crasSessionTable.crasSessionEntry.crasLocalAddress at <pysnmp.smi.builder.MibBuilder instance at 0x7f5e50d51170>

And here's the script I'm running:

ip='192.168.1.1'
community='public'
mib = "CISCO-REMOTE-ACCESS-MONITOR-MIB"
oid = 'ciscoRasMonitorMIBObjects.crasActivity.crasSessionTable.crasSessionEntry.crasLocalAddress'

cmdGen = cmdgen.CommandGenerator()

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData(community),
    cmdgen.UdpTransportTarget((ip, 161)),
    cmdgen.MibVariable(mib, oid),
    lookupNames=True, lookupValues=True
)

# Check for errors and print out results
if errorIndication:
    print(errorIndication)
elif errorStatus:
    print(errorStatus)
else:
    for string, val in varBinds:
        print('%s = %s' % (name.prettyPrint(), val.prettyPrint()))

I'm still pretty new to python, so I'm having a hard time deciphering this error.

Upon making those changes I now get this error:

Traceback (most recent call last):
  File "./snmptester.py", line 32, in <module>
    lookupNames=True, lookupValues=True
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 475, in nextCmd
    varBindHead = [ univ.ObjectIdentifier(x[0]) for x in self.__asynCmdGen.makeReadVarBinds(varNames) ]
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/cmdgen.py", line 150, in makeReadVarBinds
    self.mibViewController, oidOnly=True
  File "/usr/lib/python2.6/site-packages/pysnmp/entity/rfc3413/oneliner/mibvar.py", line 80, in resolveWithMib
    mibViewController.mibBuilder.loadModules(*self.__modNamesToLoad)
  File "/usr/lib/python2.6/site-packages/pysnmp/smi/builder.py", line 251, in loadModules
    'MIB module \"%s\" load error: %s' % (modPath, sys.exc_info()[1])
pysnmp.smi.error.SmiError: MIB module "/usr/lib/python2.6/site-packages/pysnmp/smi/mibs/instances/__TRS-MIB.pyc" load error: No module TRS-MIB loaded at <pysnmp.smi.builder.MibBuilder instance at 0x7f18dbc36d88>

I tried touching the TRS-MIB files but it still complains. Is there a way I need to build a the TRS-MIB file?

1 Answers1

0

With pysnmp, MIB has a flat structure. Therefore you can address any MIB object by its symbolic name like:

CISCO-REMOTE-ACCESS-MONITOR-MIB::ciscoRasMonitorMIBObjects
CISCO-REMOTE-ACCESS-MONITOR-MIB::crasActivity
CISCO-REMOTE-ACCESS-MONITOR-MIB::crasSessionTable
CISCO-REMOTE-ACCESS-MONITOR-MIB::crasSessionEntry
CISCO-REMOTE-ACCESS-MONITOR-MIB::crasLocalAddress

So I'd change your oid assignment to:

oid = 'crasLocalAddress'

Also keep in mind that since you are querying a SNMP table object, you must provide its column instance ID. For example:

cmdgen.MibVariable(mib, oid, (1,2,3,4))

which is a plain sub-OID or

cmdgen.MibVariable(mib, oid, '0.0.0.0')

which would be interpreted by pysnmp and transformed into a sub-OID in accordance to the SMI INDEX clause rules.

Or you could figure out the instance ID part your Agent in fact has by running nextCmd() method with no instance information given to MibVariable() so the whole column will be returned.

Berliner
  • 1
  • 1
  • You might have to compile TRS-MIB module into pysnmp form with the build-pysnmp-mib script. Then put the module into pysnmp MIB search path. – Berliner Jul 12 '13 at 17:50