Python 尝试使用pysnmp加载自定义MIB文件时出错

Python 尝试使用pysnmp加载自定义MIB文件时出错,python,mib,pysnmp,Python,Mib,Pysnmp,为了与Alpha技术的Cordex接口,我需要使用SNMP协议。我一直在阅读pysnmp的文档和示例,以便在某些方面发挥作用,在使用alpha技术的外部MIB文件时,我遇到了一些特殊问题。我的第一次测试如下: from pysnmp.hlapi import * from pysnmp.smi import builder, view, compiler, rfc1902 from pysnmp import debug #debug.setLogger(debug.Debug('all'))

为了与Alpha技术的Cordex接口,我需要使用SNMP协议。我一直在阅读pysnmp的文档和示例,以便在某些方面发挥作用,在使用alpha技术的外部MIB文件时,我遇到了一些特殊问题。我的第一次测试如下:

from pysnmp.hlapi import *
from pysnmp.smi import builder, view, compiler, rfc1902
from pysnmp import debug
#debug.setLogger(debug.Debug('all'))
debug.setLogger(debug.Debug('msgproc', 'mibbuild'))
mibBuilder = builder.MibBuilder()

mibViewController = view.MibViewController(mibBuilder)
test = ObjectIdentity('SNMPv2-MIB', 'sysDescr').addAsn1MibSource('file:///C:/Users/SLN9000/Repositories/cordex/MIB/@mib@')
test.resolveWithMib(mibViewController)
test.getOid()
当我这样做时,它会正确打印出正确的OID:

>>> ObjectName('1.3.6.1.2.1.1.1')
但是,当查看调试日志时,它似乎在使用pysnmp库中编译的MIB文件,而不是位于“C:/Users/SLN9000/Repositories/cordex/MIB/@MIB@”中的ASN.1文件。 当我对Alpha technologies的MIB文件执行类似操作时

from pysnmp.hlapi import *
from pysnmp.smi import builder, view, compiler, rfc1902
from pysnmp import debug
#debug.setLogger(debug.Debug('all'))
debug.setLogger(debug.Debug('msgproc', 'mibbuild'))
mibBuilder = builder.MibBuilder()

mibViewController = view.MibViewController(mibBuilder)
test = ObjectIdentity('03409602D__Alpha_System_Controller', 'dcpower', 1).addAsn1MibSource('file:///C:/Users/SLN9000/Repositories/cordex/MIB/')
test.resolveWithMib(mibViewController)
test.getOid()
在步骤
测试中失败。resolveWithMib(mibViewController)
错误

pysnmp.smi.error.MibNotFoundError:03409602D\uu Alpha\u系统\u控制器 编译错误:缺少


我不完全清楚我做错了什么。我正在使用的MIB文件可以从下载。感谢您的帮助

看起来他们在
03409602D_uuAlpha_System_Controller
文件中提供的MIB的规范名称是
AlphaPowerSystem MIB
(来自该文件的第一行)。我认为您最好将此文件重命名为规范名称,以简化问题

该.zip归档文件中的其他文件似乎是标准SNMP MIB的副本。pysnmp可以自己使用这些——这些核心MIB是特定于实现的。因此,您不需要该.zip中的其余MIB

完成上述操作后,您应该能够执行如下MIB查询:

test = ObjectIdentity('AlphaPowerSystem-MIB', 'dcpower', 1).addAsn1MibSource('file:///C:/Users/SLN9000/Repositories/cordex/MIB/')
它与基于pysnmp的
snmptranslate.py
工具配合使用:

$ snmptranslate.py -On  AlphaPowerSystem-MIB::dcpower

1.3.6.1.4.1.7309.4

我当前的解决方法是使用
mibdump.py
工具手动编译所有MIB文件。不是真正的可扩展性,但至少它允许我继续工作。

这仍然不起作用:它失败了,错误与以前相同。对调试行的检查表明它找不到pyc文件(文件AlphaPowerSystem-MIB.pyc访问错误:[Errno 2]没有这样的文件:)我将查看snmptranslate.py工具,也许我可以从那里对其进行反向工程。即使您提到的snmptranslate.py工具似乎也不起作用,它给了我一个错误:error:AlphaPowerSystem MIB编译错误:丢失snmptranslate.py工具(由“pip install pysnmp apps”全新安装)适合我。您是否为该工具提供了MIB的路径?默认情况下,它从Internet获取MIB源,例如,不需要您提供任何信息。确保您安装了最新的软件包(pysnmp/pysmi),从stall.pyc文件中清除“…pysnmp Configuration\mibs\”目录。如果仍然失败,请在Github上为pysnmp提交一个问题,以及您的复制程序代码片段和您得到的回溯。