我是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权限的列,我想我可以实现一个更健壮的代理应用程序。真诚感谢您的帮助/澄清
这是与
MibTableColumn
类型的tree of objects(MIB树)中的叶节点关联的OctetString
类型的泛型标量值。在MIB树中,您会发现一些节点类型,每种类型都表现出不同的行为(参见docstrings),但在其他方面它们非常相似。每个节点由一个OID标识负责您正在查询的OID的MIB树对象将接收read*(对于SNMP GET)或read*Next(对于SNMP GETNEXT/GETBULK)事件,它应该用值响应这些事件
有几种方法可以解决这个问题,到目前为止,我一直在研究的方法是重写这些
read*
/read*Next
/write*
方法中的一些方法,以便从最终源(内部表)读取或写入值为了简化代码并使其与正在实现的MIB保持同步,pysmi库可以通过Jinja2templates将MIB转换成带有存根的Python代码。只要SNMP请求触发读或写事件,就可以从这些存根访问内部表。您可以将自定义代码放入这些存根和/或生成这些存根的Jinja2模板中
除了实现自己的SNMP代理之外,您还可以考虑这个general purpose工具,它由same technology驱动
相关问题 更多 >
编程相关推荐