如何使用 pysnmp 在代理端实现 SET 和 TRAP



我基于这个例子使用pysnmp实现了SNMP代理。此示例演示 SNMP GET 和 GETNEXT 查询。但是我没有找到如何在此代码之上实现SNMP SET和TRAP的指针。我发现的SET和TRAP的例子是完全不同的实现。如何在此代码之上实现 SNMP SET 和 TRAP?

假设你想将SNMP CommandResponder(你已经实现(与SNMP NotificationReceiver结合起来,看看这个例子。您基本上可以围绕单个I/O循环将两个示例连接到同一Python模块中(例如 transport dispatcher (。

但是,通常,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.

最新更新