pysnmp 命令响应程序 - 使用外部数据(不是 mib)处理 get/set 请求
pysnmp command responder - Handle get/set requests with external data (not mib)
我想为 get/set 请求开发一个 SNMP 代理 "talks" 使用协议的复杂 python 程序。
比较难解释,我试着打个比方:
SNMP 收到参数 x 的获取请求
它向我的程序询问 x 的当前值
它将答案发送给客户端
我想要一个关于如何在单一方法中 "intercept" get/set 请求的提示,我可以在其中进行 decodeMsg-sendToPython-receiveFromPython-encodeMsg-sendToClient 进程。
pysnmp 可以实现此类应用程序的各种设计,所有这些都基于 CommandResponder class。也许最直接的方法是 create your own MibInstrumentationController class,它将同步接收 GET/SET/GETNEXT 查询,并预计 return 响应变量绑定:
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(也称为托管对象实例),以便它们可以通过某种协议与您的后端数据存储(程序)通信.
但是,这两种方法同步工作,这意味着您将阻止 SNMP 引擎,直到您从后端检索数据并 return 从请求处理函数检索数据。如果您期望高并发负载 and/or 慢速数据存储,您可能必须使用异步运行的 CommandResponder class 的较低级别 API。
也可以 tap on SNMP engine workflow 通过放置在 SNMP 消息处理代码的战略位置的挂钩集合。但该功能主要旨在从 SNMP 引擎内部获取非常具体的数据,而不是指导其操作。
我想为 get/set 请求开发一个 SNMP 代理 "talks" 使用协议的复杂 python 程序。
比较难解释,我试着打个比方:
SNMP 收到参数 x 的获取请求 它向我的程序询问 x 的当前值 它将答案发送给客户端
我想要一个关于如何在单一方法中 "intercept" get/set 请求的提示,我可以在其中进行 decodeMsg-sendToPython-receiveFromPython-encodeMsg-sendToClient 进程。
pysnmp 可以实现此类应用程序的各种设计,所有这些都基于 CommandResponder class。也许最直接的方法是 create your own MibInstrumentationController class,它将同步接收 GET/SET/GETNEXT 查询,并预计 return 响应变量绑定:
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(也称为托管对象实例),以便它们可以通过某种协议与您的后端数据存储(程序)通信.
但是,这两种方法同步工作,这意味着您将阻止 SNMP 引擎,直到您从后端检索数据并 return 从请求处理函数检索数据。如果您期望高并发负载 and/or 慢速数据存储,您可能必须使用异步运行的 CommandResponder class 的较低级别 API。
也可以 tap on SNMP engine workflow 通过放置在 SNMP 消息处理代码的战略位置的挂钩集合。但该功能主要旨在从 SNMP 引擎内部获取非常具体的数据,而不是指导其操作。