如何使用pysnmp在代理端实现SET和TRAP?
How to implement SET and TRAP in agent side with pysnmp?
我已经使用基于 this example. This example demonstrates SNMP GET and GETNEXT queries. But I have found no pointer how can I implement SNMP SET and TRAP on top of this code. Examples 的 pysnmp 实现了 SNMP 代理我发现 SET 和 TRAP 是完全不同的实现。如何在此代码之上实现 SNMP SET 和 TRAP?
假设您想将 SNMP CommandResponder(您已经实现)与 SNMP NotificationReceiver 结合使用,请查看 this example。您基本上可以在同一个 Python 模块中围绕单个 I/O 循环加入两个示例(例如 transport dispatcher
)。
但是,通常情况下,NotificationReceiver 位于 NMS,而 CommandResponder 是托管 software/device.
内部的 SNMP 代理 运行
在现有代码中支持 SNMP SET 需要重构 MIB 对象的存储方式。在当前示例中,它们保存在 non-writeable 存储(元组)中,并且 MIB 对象并非旨在更改其存储值(它们 return 为常量)。所以你需要改变这种方式。
否则支持 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
.
我已经使用基于 this example. This example demonstrates SNMP GET and GETNEXT queries. But I have found no pointer how can I implement SNMP SET and TRAP on top of this code. Examples 的 pysnmp 实现了 SNMP 代理我发现 SET 和 TRAP 是完全不同的实现。如何在此代码之上实现 SNMP SET 和 TRAP?
假设您想将 SNMP CommandResponder(您已经实现)与 SNMP NotificationReceiver 结合使用,请查看 this example。您基本上可以在同一个 Python 模块中围绕单个 I/O 循环加入两个示例(例如 transport dispatcher
)。
但是,通常情况下,NotificationReceiver 位于 NMS,而 CommandResponder 是托管 software/device.
内部的 SNMP 代理 运行在现有代码中支持 SNMP SET 需要重构 MIB 对象的存储方式。在当前示例中,它们保存在 non-writeable 存储(元组)中,并且 MIB 对象并非旨在更改其存储值(它们 return 为常量)。所以你需要改变这种方式。
否则支持 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
.