Pysnmp не может разрешить OID из ловушки snmp

Я пытаюсь разрешить идентификаторы OID, полученные в ловушке SNMP из стека коммутаторов HP, но они разрешаются только до определенного уровня и останавливаются. Похоже, что MIB HP не загружаются. Из всей документации, которую я могу найти на pysnmp, неясно, является ли это подходящим способом добавления пользовательских MIB и разрешения OID из ловушки. MIB можно загрузить здесь.

from pysnmp.entity import engine, config
from pysnmp.carrier.asyncore.dgram import udp
from pysnmp.smi import view, builder, rfc1902
from pysnmp.entity.rfc3413 import ntfrcv, mibvar

# Create SNMP engine with autogenernated engineID and pre-bound
# to socket transport dispatcher
snmpEngine = engine.SnmpEngine()
build = snmpEngine.getMibBuilder()
build.addMibSources(builder.DirMibSource("C:/Users/t/Documents/mibs"))
viewer = view.MibViewController(build)

# Transport setup

# UDP over IPv4, first listening interface/port
config.addTransport(
    snmpEngine,
    udp.domainName + (1,),
    udp.UdpTransport().openServerMode(('0.0.0.0', 162))
)

# SNMPv1/2c setup

# SecurityName <-> CommunityName mapping
config.addV1System(snmpEngine, '????', 'public')


# Callback function for receiving notifications
# noinspection PyUnusedLocal,PyUnusedLocal,PyUnusedLocal
def cbFun(snmpEngine, stateReference, contextEngineId, contextName, varBinds, cbCtx):
    print('Notification from ContextEngineId "%s", ContextName "%s"' % (contextEngineId.prettyPrint(),
                                                                        contextName.prettyPrint()))
    for name, val in varBinds:
        print(name)
        symbol = rfc1902.ObjectIdentity(name).resolveWithMib(viewer).getMibSymbol()
        print(symbol[1])



# Register SNMP Application at the SNMP engine
ntfrcv.NotificationReceiver(snmpEngine, cbFun)

snmpEngine.transportDispatcher.jobStarted(1)  # this job would never finish

# Run I/O dispatcher which would receive queries and send confirmations
try:
    snmpEngine.transportDispatcher.runDispatcher()
except:
    snmpEngine.transportDispatcher.closeDispatcher()
    raise

Вывод при получении ловушки:

Notification from ContextEngineId "0x80004fb8056ed891e8", ContextName ""
1.3.6.1.2.1.1.3.0
sysUpTime
1.3.6.1.6.3.1.1.4.1.0
snmpTrapOID
1.3.6.1.6.3.18.1.3.0
snmpTrapAddress
1.3.6.1.6.3.18.1.4.0
snmpTrapCommunity
1.3.6.1.6.3.1.1.4.3.0
snmpTrapEnterprise
1.3.6.1.4.1.11.2.14.11.5.1.7.1.29.1.9
enterprises
1.3.6.1.4.1.11.2.14.11.5.1.7.1.29.1.0.1
enterprises
1.3.6.1.4.1.11.2.14.11.5.1.7.1.29.1.0.2
enterprises
1.3.6.1.4.1.11.2.14.11.5.1.7.1.29.1.0.3
enterprises
1.3.6.1.4.1.11.2.14.11.5.1.7.1.29.1.0.4
enterprises
1.3.6.1.4.1.11.2.14.11.5.1.7.1.29.1.0.5
enterprises

Как видите, многие различные OID просто преобразуются в «предприятия». Я использую pysnmp 4.4.4.


person Cerin    schedule 11.04.2018    source источник


Ответы (1)


Да, похоже, загружены только основные MIB.

Если вы хотите следовать этому довольно низкоуровневому пути, вам необходимо предварительно скомпилировать все ваши MIB ASN.1 (те, которые вы скачали с сайта HPE) с помощью mibdump в формат pysnmp. Затем поместите эти файлы *.py в какой-нибудь каталог и укажите на него pysnmp через вызов build.addMibSources(builder.DirMibSource()).

Кроме того, не забудьте предварительно загрузить все эти MIB сразу при запуске, вызвав build.loadModules() (без аргументов).

person Ilya Etingof    schedule 13.04.2018
comment
Есть ли менее низкоуровневый путь? Кажется, я не видел ни одного. - person Cerin; 13.04.2018