我正在尝试对我的应用程序的一些特定OID执行GET命令。我有一个.txt格式的自定义MIB文件。我通过http://www.ibr.cs.tu-bs.de/projects/libsmi/tools/
将文件转换为.py格式我收到此错误。我将输出保存为X-MIB.py并继续:
smidump: module `mibs/AGILINK-MIB' contains errors, expect flawed output.
我将X-MIB.py文件保存在C:\ Python27 \ Lib \ site-packages \ pysnmp \ smi \ mibs中。我知道这是不好的做法,但我只是想测试它是否有效。
这是我的脚本,以获得一些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 :(得分:0)
如上所述in this post,您必须通过传递libsmi2pysnmp工具将smidump输出转换为兼容pysnmp的格式。
但我建议您首先解决smidump错误/警告,否则您的* .py MIB可能有问题。这些错误似乎特定于您的MIB语法。
您可以使用addMibSource()方法指向pysnmp使用您自己的路径到您自己的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'
)