【发布时间】:2018-12-14 12:15:01
【问题描述】:
我需要编写一个函数来查找给定 OID 的 MIB 名称。 例如,当我给出“1.3.6.1.2.1.31.1.1.1.6”作为参数时,它应该返回“ifHCInOctets”。我一直在搜索 PySNMP 文档和 Stack Overflow,但没有找到任何东西:这是 PySNMP 可能实现的,还是我必须为 MIB 文件编写解析器?
【问题讨论】:
我需要编写一个函数来查找给定 OID 的 MIB 名称。 例如,当我给出“1.3.6.1.2.1.31.1.1.1.6”作为参数时,它应该返回“ifHCInOctets”。我一直在搜索 PySNMP 文档和 Stack Overflow,但没有找到任何东西:这是 PySNMP 可能实现的,还是我必须为 MIB 文件编写解析器?
【问题讨论】:
使用 pysnmp 是可能的,您不需要创建 MIB 解析器。 ;-)
如果你关注this example,特别是这些作品:
from pysnmp.smi import builder, view, compiler
mibBuilder = builder.MibBuilder()
compiler.addMibCompiler(mibBuilder, sources=['/usr/share/snmp/mibs'])
mibBuilder.loadModules('IF-MIB', ...)
mibView = view.MibViewController(mibBuilder)
oid, label, suffix = mibView.getNodeName((1,3,6,1,2,1,31,1,1,1,6))
label 变量应返回 ifHCInOctets。这里需要注意的是,您需要先加载定义 OID 的 MIB,然后才能进行查找。未解析的 OID 尾部可能出现在 suffix 中。
另一种方法是使用 pysmi 的 mibdump 工具(或底层的 pysmi 库)将 ASN.1 MIB 转换为 JSON 以供您的应用程序进一步处理。
顺便说一句,同样的工具可以构建一个类似于this 的 JSON index。您可以使用它将您的 OID 映射到定义它的 MIB 模块。
【讨论】:
SNMPv2-SMI(和其他依赖项)。