我需要从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,但是我不知道如何访问此数据...
答案 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(或者如果需要,可以预编译它们并配置其源代码。)