2014-07-23 22 views
0

装在我想为我的应用程序中的一些特定的OID做一个GET命令。我有一个.txt格式的自定义MIB文件。我通过http://www.ibr.cs.tu-bs.de/projects/libsmi/tools/pysnmp.smi.error.SmiError:无模块X-MIB <在Y处pysnmp.smi.builder.MibBuilder实例>

我得到这个错误转换的文件格式的.py。我保存输出X-MIB.py并继续:

smidump: module `mibs/AGILINK-MIB' contains errors, expect flawed output. 

我保存在C我X-MIB.py文件:\ Python27 \ LIB \站点包\ pysnmp \ SMI \的MIB。我明白这是不好的做法,但我只是想测试它是否有效。

这里是我的脚本买了几回OID:

from pysnmp.entity.rfc3413.oneliner import cmdgen 

cmdGen = cmdgen.CommandGenerator() 

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData('public'), 
    cmdgen.UdpTransportTarget(('169.254.0.1', 161)), 
    cmdgen.MibVariable('X-MIB', 'aglGwDesc', '0'), 
    cmdgen.MibVariable('SNMPv2-MIB', 'sysUpTime', '0'), 
    lookupNames = True, 
    lookupValues = True 
) 

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

以下是错误:

Traceback (most recent call last): 
    File "getting_started.py", line 11, in <module> 
    lookupValues = True 
    File "C:\Python27\lib\site-packages\pysnmp\entity\rfc3413\oneliner\cmdgen.py", line 424, in getCmd 
    kwargs.get('contextName', null) 
    File "C:\Python27\lib\site-packages\pysnmp\entity\rfc3413\oneliner\cmdgen.py", line 277, in getCmd 
    self.makeReadVarBinds(varNames), 
    File "C:\Python27\lib\site-packages\pysnmp\entity\rfc3413\oneliner\cmdgen.py", line 201, in makeReadVarBinds 
    [ (x, self._null) for x in varNames ], oidOnly=True 
    File "C:\Python27\lib\site-packages\pysnmp\entity\rfc3413\oneliner\cmdgen.py", line 209, in makeVarBinds 
    varName.resolveWithMib(self.mibViewController, oidOnly=True) 
    File "C:\Python27\lib\site-packages\pysnmp\entity\rfc3413\oneliner\mibvar.py", line 159, in resolveWithMib 
    self.__modName, self.__symName 
    File "C:\Python27\lib\site-packages\pysnmp\smi\builder.py", line 302, in importSymbols 
    'No module %s loaded at %s' % (modName, self) 
pysnmp.smi.error.SmiError: No module X-MIB loaded at <pysnmp.smi.builder.MibBuilder instance at 0x02D6B8F0> 

我的问题是我该如何解决这个问题?是否因为制作X-MIB.py文件中的前一个错误?

我知道这是能看到我的X-MIB.py文件,因为错误是不是说“无法找到X-MIB路径”或类似的东西。我阅读http://pysnmp.sourceforge.net/上的文档,但我无法关注它。

回答

0

如前所述in this post,你必须将其通过libsmi2pysnmp工具smidump输出转换成pysnmp兼容的格式。

但是我劝你解决smidump错误/警告第一,否则你*的.py MIB可能出现故障。这些错误似乎是特定于您的MIB语法的。

你可以点pysnmp使用addMibSource()方法来使用自己的路你自己pysnmp兼容MIB目录:

cmdgen.MibVariable('X-MIB', 'aglGwDesc', '0').addMibSource('/tmp/mymibs'), 

最后,你真的不需要一个MIB来查询SNMP代理 - 只是通过命令生成一个纯文本的OID,而不是MibVariable实例:

errorIndication, errorStatus, errorIndex, varBinds = cmdGen.getCmd(
    cmdgen.CommunityData('public'), 
    cmdgen.UdpTransportTarget(('demo.snmplabs.com', 161)), 
    '1.3.6.1.2.1.1.1.0', 
    '1.3.6.1.2.1.1.6.0' 
)