如何访问 MibTableColumn 中的数据

How to access data in MibTableColumn

我需要从 mib 的语法中提取值的名称,但我不知道该怎么做。当我的脚本从带有 oid "ccmHistoryEventCommandSource" 且值为“1”的设备接收到陷阱时,我想得到它的名称 "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,但我不知道如何访问这些数据...

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 that defines the object you are trying to resolve. You may also need to configure the source 的 ASN.1 MIB(或者你可以预编译它们并根据需要配置它们的源)。