PySNMP 如何处理具有读取创建权限的表?

我是 SNMP 新手,发现很难理解 PySNMP 中的一些机制。我需要实现一个具有读取创建权限的表来监视和控制我网络上的网桥。我认为,如果我对其中一段示例代码有更清晰的了解,以了解当经理尝试创建新行时框架中发生了什么,这将是有帮助的。


我一直在研究实现概念表和执行示例 snmpset/walk 命令的示例代码:


    $ snmpset -v2c -c public 127.0.0.1 1.3.6.6.1.5.2.97.98.99 s “my value”

    $ snmpset -v2c -c public 127.0.0.1 1.3.6.6.1.5.4.97.98.99 i 4

    $ snmpwalk -v2c -c public 127.0.0.1 1.3.6

据我所知,set 命令之所以有效,是因为 MIB 承诺exampleTableColumn2描述OctetString标量。代理如何创建/存储这些数据?是使用后缀“.97.98.99”创建的通用标量对象,还是此信息以某种方式与 的实例相关联exampleTableColumn2?如果我随后在我们刚刚创建的对象上运行 snmpget 或 snmpset 命令,在框架的眼中我会与什么交互?


在现实世界的实现中,代理实际上会查询设备以在某个内部表中创建新条目,并且您需要具有修改的 readGet/writeCommit 方法的自定义标量对象,但示例代码尚未建立标量类来实现获取/设置方法。通过了解在 PySNMP 中应该如何处理具有读取创建权限的列,我想我可以实现一个更健壮的代理应用程序。真诚感谢任何帮助/澄清。


弑天下
浏览 141回答 1
1回答

慕哥9229398

代理如何创建/存储这些数据?是使用后缀“.97.98.99”创建的通用标量对象,还是此信息以某种方式与 exampleTableColumn2 的实例相关联?这是与类型为 的对象树(MIB 树)中OctetString的叶节点关联的类型的通用标量值。在 MIB 树中,您会发现一些节点类型,每个都表现出不同的行为(请参阅文档字符串),但除此之外它们非常相似。每个节点都由一个 OID 标识。MibTableColumn如果我随后在我们刚刚创建的对象上运行 snmpget 或 snmpset 命令,在框架的眼中我将与什么进行交互?负责您正在查询的 OID 的 MIB 树对象将接收read*(对于 SNMP GET)或read*Next(对于 SNMP GETNEXT/GETBULK)事件,它应该以一个值响应这些事件。在现实世界的实现中,代理实际上会查询设备以在某个内部表中创建一个新条目,并且您需要具有修改的 readGet/writeCommit 方法的自定义标量对象有几种方法可以解决这个问题,到目前为止我一直在追求的方法是覆盖其中的一些read*//方法来从read*Next/write*向其最终源(您的内部表)读取或写入值。为了简化代码并使您的代码与您正在实现的 MIB 保持同步,pysmi 库可以通过 Jinja2模板将 MIB 转换为带有存根的 Python 代码。只要 SNMP 请求触发读取或写入事件,您就可以从这些存根访问您的内部表。您可以将自定义代码放入这些存根和/或生成这些存根的 Jinja2 模板中。作为实现您自己的 SNMP 代理的替代方法,您可以考虑使用这个由相同技术驱动的通用工具。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python