python - pysnmp 命令响应程序 - 使用外部数据(不是 mib)处理获取/设置请求

标签 python pysnmp

我想开发一个用于获取/设置请求的 SNMP 代理,它使用协议(protocol)与复杂的 python 程序“对话”。

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

SNMP 收到参数 x 的获取请求 它向我的程序询问 x 的当前值 它将答案发送给客户端

我想要有关如何在单个方法中“拦截”获取/设置请求的提示,在该方法中我可以进行decodeMsg-sendToPython-receiveFromPython-encodeMsg-sendToClient进程。

最佳答案

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

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 (又名托管对象实例),以便它们可以通过某种协议(protocol)与您的后端数据存储(程序)通信。

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

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

关于python - pysnmp 命令响应程序 - 使用外部数据(不是 mib)处理获取/设置请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30660371/

相关文章:

python - 类型错误 : 'module' object is not callable in Playsound module

python - pandas 数据框上的 numpy arange 实现

python - 程序在 IDLE 下工作,但在命令行下失败

python - 异步 getNext 超出表时出错

python - 如何在 pysnmp 中查找 mib 表?

Python编码风格——多重返回语句

javascript - AES 在 cryptojs 中加密并在 python Crypto.Cipher 中解密

python - 如何在不同的 (SNMPv3) 上下文中注册 MIB 模块。在SNMP代理端

python-3.x - 使用 PySNMP 的 snmpwalk