2013-07-12 39 views
0

我似乎无法让这个脚本工作。任何帮助是极大的赞赏。pysnmp.smi.error.SmiError:没有符号

这是我不断收到错误:

./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> 

这里就是我运行该脚本:

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

我还是很新的蟒蛇,所以我有一个硬时间解读这个错误。

在作出这些改变现在我得到这个错误:

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> 

我试图触摸TRS-MIB文件,但它仍然抱怨。我需要建立一个TRS-MIB文件吗?

回答

0

随着pysnmp,MIB有一个扁平的结构。因此,你可以像它的符号名解决任何MIB对象:

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 

所以我想你的OID分配更改为:

oid = 'crasLocalAddress' 

而且记住,因为你是查询SNMP表对象,您必须提供其列实例ID。例如:

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

这是一个普通的子OID或

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

这将由pysnmp根据到SMI INDEX子句规则被解释并转化成一个子OID。

或者您可以通过运行nextCmd()方法来确定您的代理实际上具有的实例ID部分,但没有为MibVariable()提供实例信息,因此将返回整个列。

+0

您可能需要使用build-pysnmp-mib脚本将TRS-MIB模块编译为pysnmp格式。然后将该模块放入pysnmp MIB搜索路径。 – Berliner