PYSNMP v3 против CISCO - PullRequest
       22

PYSNMP v3 против CISCO

0 голосов
/ 22 февраля 2019

Я пытаюсь получить ответ от ucs-6100 по SNMP.

Через консоль: (аналог моего запроса)

>>> snmpget -v3 -l authPriv -u usr-sha-aes -A authkey1 -X privkey1 -a SHA -x AES demo.snmplabs.com SNMPv2-MIB::sysDescr.0

У меня получается

Но когда я использую pysnmp (вот так)

from pysnmp.hlapi import *
resp = next(getCmd(SnmpEngine(),
       UsmUserData('usr-sha-aes', 'authkey1', 'privkey1',
                   authProtocol=usmHMACSHAAuthProtocol,
                   privProtocol=usmAesCfb128Protocol),
       UdpTransportTarget(('demo.snmplabs.com', 161)),
       ContextData(),
       ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0)))
)

(код с этими параметрами работает)

Я всегда получаю ответ:

Out[20]:(pysnmp.proto.errind.UnknownEngineID('Unknown SNMP engine ID encountered'),
0,
0,
[])

Iдумаю, что это из-за конфигурации протокола.Можно ли не отправить двигатель с запросом?Или любой другой дизайн.

Заранее спасибо.python 3.6 pysnmp 4.4.9

1 Ответ

0 голосов
/ 26 февраля 2019

Итак, я нашел, где он упал.

Если вы имеете дело с балансировщиками, у вас может быть похожая проблема.
Описание:
Когда мы отправляем запрос через / balancer_host / из консоли whith "snmpget«у нас нет различий, и мы получаем ответ от / host_1 / или / host_2 / явно (прямой запрос к host_1 / 2 также всегда успешен, но в реальной ситуации мы не знаем, что host -« balanser »или нет, и мы не знаем,кто из хостов ответил)1007 *

observer_context = {}
snmp_engine.observer.registerObserver(
    lambda e, p, v, c: c.update(securityEngineId=v['securityEngineId']), 
    'rfc3412.prepareDataElements:internal',
    cbCtx=observer_context)
auth_data = UsmUserData('non-existing-user')
next(getCmd(snmp_engine, auth_data,
transport_target, ContextData(), ObjectType(ObjectIdentity('SNMPv2-MIB', 'sysDescr', 0))))
print(observer_context['securityEngineId'].prettyPrint())

и создайте правильный движок, но мы, тем не менее, получим похожую проблему, потому что мы отправляем запрос в / balancer_host /, с SnmpEngine (EngineID), который был получен из / host_1 / (например).
Итак,Тестовый запрос от наблюдателя работает, реальный запрос данных - нет.
Но мне интересно знать, как работает запрос в «snmpget» - всегда успешно.

У кого-нибудь есть идеи, как отправить запрос через «балансировщик» без SnmpEngine?

...