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

时间:2014-11-24 04:20:41

标签: python snmp mib pysnmp

我正在尝试编写一段接受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,...}加入{"OID": true,...}

这可能与PySNMP有关吗?

1 个答案:

答案 0 :(得分:1)

使用pysnmp可以实现:

from pysnmp.smi import builder

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

但是一般情况下,您必须以某种方式将OID映射到值类型(其中一些可能会解析为TEXTUAL-CONVENTIONS)。这可以通过为应用程序中的特定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值转换为关联类型。

更新:

考虑使用自pysnmp 4.3

以来可用的higher-level interface到MIB服务