如何访问 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(或者你可以预编译它们并根据需要配置它们的源)。
我需要从 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(或者你可以预编译它们并根据需要配置它们的源)。