我想为获取/设置请求开发一个SNMP代理,以便"会谈"使用协议的复杂python程序。
这很难解释,所以我试着举个例子:
SNMP收到param x的get请求 它向我的程序询问x的当前值 它将答案发送给客户
我想知道如何拦截"单个方法中的get / set请求,我可以在其中生成decodeMsg-sendToPython-receiveFromPython-encodeMsg-sendToClient进程。
答案 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引擎内部获取非常具体的数据,而不是指导其操作。