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

2024-05-17 08:20:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我有许多自定义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))

我知道这不是一个好主意(基于类名进行比较),但这是我迄今为止实现这一点的方法。在

^{pr2}$

这是我浏览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

如何更好地选择通知类型?不同的mib文件对通知类型使用不同的RFC导入。这就是我困惑的地方。在


Tags: 文件view类型rfcbuildersuffixmiboid
1条回答
网友
1楼 · 发布于 2024-05-17 08:20:26

我可以想出两种方法:

  1. Duck类型:检查.getObjects方法。它应该只在通知类型对象中定义
  2. 坚持与NotificationType类进行比较。但是,如果您设法加载了NotificationType类的多个实例,那么这种情况可能会中断。在

    nt, = mibBuilder.importSymbols('SNMPv2-SMI', 'NotificationType')
    ...
    if isinstance(nt, a['ENTUITY-MIB']['snmpAgentNotResponding']):
        print('is notification type')
    

如果你能分享关于MIB构造识别技术的更好的想法-我愿意接受建议。在

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

相关问题 更多 >