pysnmp命令响应器 - 使用外部数据处理get / set请求(不是mib)

时间:2015-06-05 07:06:35

标签: python pysnmp

我想为获取/设置请求开发一个SNMP代理,以便"会谈"使用协议的复杂python程序。

这很难解释,所以我试着举个例子:

SNMP收到param x的get请求 它向我的程序询问x的当前值 它将答案发送给客户

我想知道如何拦截"单个方法中的get / set请求,我可以在其中生成decodeMsg-sendToPython-receiveFromPython-encodeMsg-sendToClient进程。

1 个答案:

答案 0 :(得分:1)

使用pysnmp可以实现这种应用程序的各种设计,所有这些都基于CommandResponder类。也许最简单的方法是create your own MibInstrumentationController class同步接收GET / SET / GETNEXT查询,并期望返回响应变量绑定:

class EchoMibInstrumController(instrum.AbstractMibInstrumController):
    def readVars(self, vars, acInfo=(None, None)):
        return vars
    def readNextVars(self, vars, acInfo=(None, None)):
        return vars
    def writeVars(self, vars, acInfo=(None, None)):
        return vars

另一种解决方案是将您的MIB编译为pysnmp格式(使用PySMI编译器)和specialize MIB variables(AKA托管对象实例),以便它们通过某种协议与您的后端数据存储(程序)进行通信。 / p>

但是,这两种方法同步工作意味着您将阻止SNMP引擎,直到您从后端检索数据并从请求处理函数返回。如果您期望高度并发加载和/或慢速数据存储,则可能必须使用异步运行的CommandResponder类的低级API。

还可以通过放置在SNMP消息处理代码的战略位置的钩子集合来tap on SNMP engine workflow。但该功能主要用于从SNMP引擎内部获取非常具体的数据,而不是指导其操作。