【问题标题】:Errors trying to load custom MIB file with pysnmp尝试使用 pysnmp 加载自定义 MIB 文件时出错
【发布时间】:2017-03-15 14:51:41
【问题描述】:

要与 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 下载。任何帮助表示赞赏!

【问题讨论】:

    标签: python mib pysnmp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      看起来他们在 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

      【讨论】:

      • 这仍然不起作用:它失败并出现与以前相同的错误。检查调试行说它找不到 pyc 文件(文件 AlphaPowerSystem-MIB.pyc 访问错误:[Errno 2] No such file:)
      • 我会看看 snmptranslate.py 工具,也许我可以从那里进行逆向工程。
      • 即使您提到的 snmptranslate.py 工具似乎也不起作用,它给了我错误:错误:AlphaPowerSystem-MIB 编译错误:缺失
      • snmptranslate.py 工具(由“pip install pysnmp-apps”全新安装)对我有用。您是否提供了该工具的 MIB 路径?默认情况下,它从 Internet 获取 MIB 源,例如不需要你做任何事情。
      • 确保您安装了最新的软件包 (pysnmp/pysmi),从stall .pyc 文件中清理“...PySNMP Configuration\mibs\”目录。如果它仍然失败,请在 Github 上为 pysnmp 提交问题,并附上你的复制代码 sn-p 和你得到的回溯。
      猜你喜欢
      • 2012-02-19
      • 1970-01-01
      • 1970-01-01
      • 2015-01-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多