Как получить объекты NotificationType() из скомпилированных файлов MIB 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 используются разные типы импорта RFC для NotificationTypes. Это где я запутался.

1 ответ

Решение

Я могу придумать два пути:

  1. Утиная печать: проверьте метод.getObjects. Он должен быть определен только в объектах NOTIFICATION-TYPE
  2. Придерживайтесь сравнения с классом NotificationType. Однако это может сломаться, если вам каким-то образом удастся загрузить несколько экземпляров классов NotificationType.

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

Если вы можете поделиться лучшими идеями о методах идентификации конструкций MIB - я открыт для предложений.

Какова ваша конечная цель? Можно ли это сделать с помощью классов ObjectType/NotificationType?

Другие вопросы по тегам