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

2024-05-14 07:01:33 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我已经检查了implementing a conceptual table的示例代码并执行了示例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方法的自定义标量对象,但是示例代码还没有建立标量类来实现get/set方法。通过理解PySNMP中应该如何处理具有read-create权限的列,我想我可以实现一个更健壮的代理应用程序。真诚感谢您的帮助/澄清


Tags: 对象代码命令框架权限示例代理read
1条回答
网友
1楼 · 发布于 2024-05-14 07:01:33

How is this data created/stored by the agent? Is a generic scalar object created with the suffix ".97.98.99," or is this information somehow associated with the instance of exampleTableColumn2?

这是与MibTableColumn类型的tree of objects(MIB树)中的叶节点关联的OctetString类型的泛型标量值。在MIB树中,您会发现一些节点类型,每种类型都表现出不同的行为(参见docstrings),但在其他方面它们非常相似。每个节点由一个OID标识

If I were to subsequently run an snmpget or snmpset command on the object we just created, what would I be interacting with in the eyes of the framework?

负责您正在查询的OID的MIB树对象将接收read*(对于SNMP GET)或read*Next(对于SNMP GETNEXT/GETBULK)事件,它应该用值响应这些事件

In a real-world implementation, the agent would really be querying the device to create a new entry in some internal table, and you would need custom scalar objects with modified readGet/writeCommit methods

有几种方法可以解决这个问题,到目前为止,我一直在研究的方法是重写这些read*/read*Next/write*方法中的一些方法,以便从最终源(内部表)读取或写入值

为了简化代码并使其与正在实现的MIB保持同步,pysmi库可以通过Jinja2templates将MIB转换成带有存根的Python代码。只要SNMP请求触发读或写事件,就可以从这些存根访问内部表。您可以将自定义代码放入这些存根和/或生成这些存根的Jinja2模板中

除了实现自己的SNMP代理之外,您还可以考虑这个general purpose工具,它由same technology驱动

相关问题 更多 >

    热门问题