python - 使用 pysnmp 从 MIB 文本约定翻译 OID 值对

标签 python snmp mib pysnmp

我正在尝试编写一段代码,它接受一个以 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/

相关文章:

python - 解析 SNMP MIB 文件以生成设备和 OID 列表

python - 如何创建一个 WTF 表单和 Flask 在计算后返回一个值?

python - 解析 HTML 以检索术语

linux - Linux操作系统下主机资源MIB的实现

java - 无需等待超时即可检查设备是否有 snmp 对象?

SNMP MIB : revision for last update is missing

parsing - 读取 IPAddress 类型的 SNMP 对象索引

python - 如何从嵌套 JSON 中获取扁平 JSON?

python - 为具有最小窗口长度的连续系列过滤 pandas 或 numpy 数组

linux - snmpd 未在 Ubuntu 服务器上监听端口 161