pysnmp.smi.error.SmiError:在 <pysnmp.smi.builder.MibBuilder instance at Y>

问题描述 投票:0回答:1

我正在尝试对我的应用程序的一些特定 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”或类似的内容。我阅读了 PySNMP 文档,但无法理解它。

python snmp pysnmp
1个回答
0
投票

正如本文中提到的,您必须通过 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' )

	
© www.soinside.com 2019 - 2024. All rights reserved.