我正在尝试通过SNMP从ucs-6100获得答案。
通过控制台:(我的要求的模拟)
>>> 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,
[])
我认为那是因为协议的配置。是否有可能不发送引擎请求?或任何其他设计。
提前致谢。 python 3.6 pysnmp 4.4.9
所以,我发现它崩溃的地方。
如果您与平衡器有交易,您可能会遇到类似的问题。 描述: 当我们通过/ balancer_host /从控制台whith“snmpget”发送请求时我们没有区别,我们得到/ host_1 /或/ host_2 /的响应(直接请求host_1 / 2也总是成功,但在实际情况下我们不要已知主机是“balanser”还是没有,我们不知道哪个主机做出了响应。)
当我们通过/ balancer /从脚本whith“pysnmp”发送请求时,我们得到错误'UnknownEngineID',是的,我们可以尝试使用'snmp_engine.observer'获取正确的EngineID:
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 /发送请求,使用从/ host_1 /(例如)获得的SnmpEngine(EngineID)。 因此,来自观察者的测试请求正在工作,对数据的实际请求 - 没有。 但我很想知道,请求如何在“snmpget”中工作 - 总是成功的。
有人有一些想法如何在没有SnmpEngine的情况下通过“balancer”发送请求?