我已经基于此示例使用 pysnmp 实现了一个 SNMP 代理。此示例演示 SNMP GET 和 GETNEXT 查询。但是我没有发现如何在此代码之上实现 SNMP SET 和 TRAP 的指针。我为 SET 和 TRAP 找到的示例是完全不同的实现。如何在此代码之上实现 SNMP SET 和 TRAP?
问问题
462 次
1 回答
1
假设您想将 SNMP CommandResponder(您已经实现)与 SNMP NotificationReceiver 结合使用,请查看此示例。您基本上可以围绕单个 I/O 循环(例如transport dispatcher
)在同一个 Python 模块中加入这两个示例。
但是,通常,NotificationReceiver 驻留在 NMS 中,而 CommandResponder 是在托管软件/设备内运行的 SNMP 代理。
在现有代码中支持 SNMP SET 需要重构 MIB 对象的存储方式。在当前示例中,它们保存在不可写存储(元组)中,并且 MIB 对象并非旨在更改其存储值(它们返回一个常量)。因此,您需要以一种或另一种方式进行更改。
否则支持 SNMP SET 很简单 - 只需添加如下条件:
...
elif reqPDU.isSameTypeWith(pMod.SetRequestPDU()):
for oid, val in pMod.apiPDU.getVarBinds(reqPDU):
if oid in mibInstrIdx:
# put your MIB instrumentation update code here
# smith like this, but not exactly:
mibInstrIdx[oid] = mibInstrIdx[oid].clone(val)
varBinds.append((oid, mibInstrIdx[oid](msgVer)))
else:
# No such instance
varBinds.append((oid, val))
pendingErrors.append(
(pMod.apiPDU.setNoSuchInstanceError, errorIndex)
)
break
进入你的cbFun
.
于 2018-03-01T08:33:40.150 回答