如何访问MibTableColumn中的数据

时间:2018-12-22 06:36:33

标签: python pysnmp

我需要从mib的语法中提取值的名称,但我不知道该怎么做。当我的脚本从设备接收到具有值为“ 1”的oid“ ccmHistoryEventCommandSource”的陷阱时,我想获取其名称为“ commandLine” ...

mib的一部分(CISCO-CONFIG-MAN-MIB):

ccmHistoryEventCommandSource OBJECT-TYPE
    SYNTAX          INTEGER  {
                        commandLine(1),
                        snmp(2)
                    }
    MAX-ACCESS      read-only
    STATUS          current
    DESCRIPTION
            "The source of the command that instigated the event."
    ::= { ccmHistoryEventEntry 3 }

这是我的代码的一部分:

mib_obj = rfc1902.ObjectIdentity(oid).resolveWithMib(mibViewController)
mn = mib_obj.getMibNode()
print(">>> ", mn)
print(">>> ", mn.syntax)

这是输出:

>>>  MibTableColumn((1, 3, 6, 1, 4, 1, 9, 9, 43, 1, 1, 6, 1, 3), Integer32(subtypeSpec=ConstraintsUnion(ConstraintsUnion(SingleValueConstraint(1, 2)), ConstraintsIntersection(ConstraintsIntersection(), ValueRangeConstraint(-2147483648, 2147483647))), NamedValues(('commandLine', 1), ('snmp', 2))))
>>>  NoValue()

我已经用代码编译了CISCO-CONFIG-MAN-MIB.py:

ccmHistoryEventCommandSource = MibTableColumn((1, 3, 6, 1, 4, 1, 9, 9, 43, 1, 1, 6, 1, 3), Integer32().subtype(subtypeSpec=ConstraintsUnion(SingleValueConstraint(1, 2))).clone(namedValues=NamedValues(("commandLine", 1), ("snmp", 2)))).setMaxAccess("readonly")

我们可以看到,输出有一些我需要的NamedValues,但是我不知道如何访问此数据...

1 个答案:

答案 0 :(得分:0)

ObjectIdentity对象从不携带任何值,它只是MIB对象的ID。但是ObjectType对象同时容纳ID和值。

因此,您需要将在TRAP消息中收到的变量绑定提供给ObjectType对象,而不是ObjectIdentity对象。

也许是这样的:

resolved_var_binds = [
    ObjectType(ObjectIdentity(oid), value).resolveWithMib(mibViewController)
    for oid, value in var_binds]

resolved_values = [value for oid, value in resolved_varbinds]

确保您load the MIB定义了您要解析的对象。您可能还需要configure the source的ASN.1 MIB(或者如果需要,可以预编译它们并配置其源代码。)