pysnmp.smi.error.SmiError: 未加载模块X-MIB,位于<pysnmp.smi.builder.MibBuilder实例Y>

0 投票
1 回答
1905 浏览
提问于 2025-04-18 14:22

我正在尝试对我的应用程序进行一些特定的OID的GET命令。我有一个自定义的MIB文件,格式是.txt。我通过这个链接把文件转换成了.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”之类的话。我看过这个文档,但我还是没法理解。

1 个回答

0

正如这篇文章中提到的,你需要把smidump的输出转换成pysnmp可以识别的格式,这个过程可以通过libsmi2pysnmp工具来完成。

不过,我建议你先解决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'
)

撰写回答