要与Alpha Technologies的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技术的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()
在步骤test.resolveWithMib(mibViewController)
失败且错误
pysnmp.smi.error.MibNotFoundError:03409602D__Alpha_System_Controller 编译错误:缺少
我不清楚我做错了什么。我正在使用的MIB文件可以从here下载。任何帮助表示赞赏!
答案 0 :(得分:0)
我目前的解决方法是使用mibdump.py
工具手动编译所有MIB文件。不是真正的可扩展性,但至少它允许我继续我的工作。
答案 1 :(得分:-1)
它们在03409602D__Alpha_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