如何从已编译的pysnmp mib文件中获取NotificationType()对象?

时间:2015-10-09 04:21:23

标签: python pysnmp

我有许多自定义mib文件编译成pysnmp所需格式并存储在目录下。我正在尝试加载它们并仅拾取NotificationType()类型的那些。默认情况下,它将包含所有内容

我怎样才能做到这一点? 这就是我所说的(例如snmpAgentNotResponding事件):

from pysnmp.smi import builder, view
mibBuilder = builder.MibBuilder().loadModules('entuity-mib')
mibView = view.MibViewController(mibBuilder)
>>> a = mibView.mibBuilder.mibSymbols
>>> a.keys()
['ENTUITY-MIB', 'ASN1-REFINEMENT', 'RFC1155-SMI', 'ASN1', 'RFC-1212', 'SNMPv2-SMI', 'RFC-1215', 'ASN1-ENUMERATION', 'RFC1213-MIB']
>>> a['ENTUITY-MIB']['snmpAgentNotResponding']
NotificationType((1, 3, 6, 1, 4, 1, 2626, 1, 1, 1, 0, 655363))

我知道这不是一个好主意(根据类名进行比较),但这是我迄今为止所做的事情。

>>> b = a['ENTUITY-MIB']['snmpAgentNotResponding']
>>> b.__class__.__name__
'NotificationType'

这是我遍历mib文件的代码(来自pysnmp论坛)。

oid, label, suffix = mibView.getFirstNodeName()
while True:
     try:
        modName, nodeDesc, suffix = mibView.getNodeLocation(oid)
        print '%s::%s == %s' % (modName, nodeDesc, oid)
        oid, label, suffix = mibView.getNextNodeName(oid)
     except Exception, e:
        print e
        break

如何以更好的方式选择NotificationTypes?不同的mib文件对NotificationTypes使用不同的RFC导入。这是我感到困惑的地方。

1 个答案:

答案 0 :(得分:0)

我可以想到两种方式:

  1. Duck-typing:检查.getObjects方法。它应该只在NOTIFICATION-TYPE对象中定义
  2. 坚持与NotificationType类进行比较。但是,如果您以某种方式设法加载了NotificationType类的多个实例,则可能会中断。

    nt, = mibBuilder.importSymbols('SNMPv2-SMI', 'NotificationType')
    ...
    if isinstance(nt, a['ENTUITY-MIB']['snmpAgentNotResponding']):
        print('is notification type')
    
  3. 如果您可以就MIB构建识别技术分享更好的想法 - 我可以接受建议。

    你的最终目标是什么?可以用ObjectType/NotificationType类来完成吗?