Как получить объекты 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 ответ
Я могу придумать два пути:
- Утиная печать: проверьте метод.getObjects. Он должен быть определен только в объектах NOTIFICATION-TYPE
Придерживайтесь сравнения с классом NotificationType. Однако это может сломаться, если вам каким-то образом удастся загрузить несколько экземпляров классов NotificationType.
nt, = mibBuilder.importSymbols('SNMPv2-SMI', 'NotificationType') ... if isinstance(nt, a['ENTUITY-MIB']['snmpAgentNotResponding']): print('is notification type')
Если вы можете поделиться лучшими идеями о методах идентификации конструкций MIB - я открыт для предложений.
Какова ваша конечная цель? Можно ли это сделать с помощью классов ObjectType/NotificationType?