使用 pysnmp 从 MIB 文本约定转换 OID 值对

2024-04-10

我正在尝试编写一段代码,它接受一个 JSON 对象,其中 OID 作为键,OID 值作为值。一个例子是:

{".1.3.6.1.4.1.562.29.6.2.3": "Link Down",
 ...
}

收到此 JSON 对象时,我想使用 PySNMP 转换 OID 和 OID 值,但我不知道如何根据相应 MIB 文件中定义的文本约定转换 OID 值。

MIB 文件示例将定义:

TruthValue ::= TEXTUAL-CONVENTION
     STATUS       current
     DESCRIPTION
             "Represents a boolean value."
     SYNTAX       INTEGER { true(1), false(2) }

给定一个 OID 和一个遵循文本约定(如上面的约定)的 OID 值,我想翻译:

{"OID": 1,...} into {"OID": true,...}

这可以用 PySNMP 实现吗?


这可以通过 pysnmp 实现:

from pysnmp.smi import builder

mibBuilder = builder.MibBuilder()
TruthValue, = mibBuilder.importSymbols('SNMPv2-TC', 'TruthValue')
print(TruthValue(1).prettyPrint()) # prints 'true'

然而,一般来说,您必须以某种方式将 OID 映射到值类型(其中一些可能会解析为文本约定)。这可以通过硬编码应用程序中特定 OID 的 OID->类型映射来以临时方式完成,但更通用的解决方案是使用 pysnmp MIB 服务:

from pysnmp.smi import view, builder

mibViewController = view.MibViewController(builder.MibBuilder())
varName = mibvar.MibVariable('1.3.6.1.6.3.10.2.1.1.0').loadMibs('SNMP-FRAMEWORK-MIB').resolveWithMib(mibViewController)
print(varName.getMibNode().getSyntax().clone('12341234'))

上面的示例将获取 1.3.6.1.6.3.10.2.1.1.0 的值类型,并将 12341234 值转换为关联类型。

UPDATED:

考虑使用高层接口 http://pysnmp.sourceforge.net/docs/contents.html#mib-services自 pysnmp 4.3 起可用的 MIB 服务

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pysnmp 从 MIB 文本约定转换 OID 值对 的相关文章