我正在尝试编写一段代码,它接受一个以 OID 作为键并将 OID 值作为值的 JSON 对象。一个例子是:
{".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,...}
到 {"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 值转换为关联类型。
更新:
考虑使用 higher-level interface自 pysnmp 4.3 以来可用的 MIB 服务
关于python - 使用 pysnmp 从 MIB 文本约定翻译 OID 值对,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097809/