我想为使用协议与复杂的python程序“对话”的获取/设置请求开发SNMP代理。
这很难解释,因此我尝试举一个例子:
SNMP收到对参数x的获取请求。它向我的程序询问x的当前值,并将答案发送给客户端
我想要一个有关如何在单个方法中“拦截”获取/设置请求的提示,在该方法中,我可以使decodeMsg-sendToPython-receiveFromPython-encodeMsg-sendToClient流程。
pysnmp可以实现此类应用程序的各种设计,所有设计均基于CommandResponder类。也许最直接的方法是创建自己的MibInstrumentationController类,该类将同步接收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编译器),并专门设置MIB变量(又称为受管对象实例),以便它们可以通过某种协议与您的后端数据存储(程序)对话。
但是,这两种方法都是同步工作的,这意味着您将阻塞SNMP引擎,直到从后端检索数据并从请求处理功能返回为止。如果期望较高的并发负载和/或缓慢的数据存储,则可能必须使用异步运行的CommandResponder类的较低级别的API。
也可以通过放置在SNMP消息处理代码的关键位置的一组挂钩来利用SNMP引擎工作流。但是该功能主要旨在从SNMP引擎内部获取非常具体的数据,而不是指导其操作。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句