PySNMP 能否找到 OID 的 MIB 名称?

Can PySNMP find the MIB name for an OID?

我需要做的是编写一个函数来查找给定 OID 的 MIB 名称。 例如,当我给出 '1.3.6.1.2.1.31.1.1.1.6' 作为参数时,它应该 return '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变量应该returnifHCInOctets。这里需要注意的是,您需要先加载定义 OID 的 MIB,然后才能查找它。 OID 的未解析尾部可能出现在 suffix.

另一种方法可能是使用 pysmi 的 mibdump tool (or the underlying pysmi 库)将 ASN.1 MIB 转换为 JSON 以供您的应用程序进一步处理。

顺便说一句,同样的工具可以构建一个JSON index which would look like this。您可以使用它将您的 OID 映射到定义它的 MIB 模块。