python - PYSNMP v3 与 CISCO
问题描述
我正在尝试通过 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,
[])
我认为这是因为协议的配置。是否可以不发送请求的引擎?或任何其他设计。
提前致谢。蟒蛇 3.6 pysnmp 4.4.9
解决方案
所以,我找到了它崩溃的地方。
如果您与平衡器打交道,您可能会遇到类似的问题。
描述:
当我们从控制台通过 /balancer_host/ 发送请求时,“snmpget”我们没有区别,并且我们清楚地从 /host_1/ 或 /host_2/ 得到响应(直接向 host_1/2 请求也总是成功,但在实际情况下我们不知道主机是否是“balanser”,我们也不知道是哪个主机做出了响应。)
当我们通过 /balancer/ 从带有“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/ 发送请求,其中 SnmpEngine(EngineID) 来自 /host_1/(例如)。
因此,来自观察者的测试请求正在工作,对数据的真实请求 - 不。
但我很想知道,请求在“snmpget”中是如何工作的——总是成功的。
有人有一些想法如何在没有 SnmpEngine 的情况下通过“平衡器”发送请求?
推荐阅读
- python - 在数据框中组合/映射行
- javascript - 形成 laravel 和 vueJS
- javascript - 如何在不重新出现用户先前输入的情况下完全重置表单?
- c++ - push_back 在调用析构函数时使对象中的指针无效
- powerbi - Power BI - 在 PIBX 文件之间复制粘贴行级安全性
- google-api - Google Drive API - 解构评论锚
- mysql - NodeJs + Knex + MySql + WSL 2 让磁盘 100% 运行,性能非常慢
- javascript - 当我在移动设备上启动网站时,它会放大,我必须用手指缩小
- scala - 带有 minIO 的 Spark 历史服务器:获取 AmazonHttpClient:无法执行 HTTP 请求:连接被拒绝
- vue.js - 对于大型应用程序,我如何重构我的 main.js 文件以使其结构更加模块化?