2012-02-29 259 views
0

我已经使用SNMP4J实现了SNMP代理。我已经阅读过各种地方(包括SNMP4J javadoc),它们支持'getSubtree'操作,但似乎总是使用getNext和/或getBulk从客户端完成。然而,我想要做的是为'getSubtree'定义一个新的PDU,并为其实现服务器端代理支持。 (a)使用SNMP4J实现了一种新的PDU类型(超出了7种标准的PDU类型),和/或(b)在代理中实现了'getSubtree'支持(我已经知道如何从客户端模拟它)是(a)还是(b)甚至可能?任何关于如何做的指针都将非常感谢!如何实现SNMP“getSubtree”PDU类型,并在SNMP代理中支持它?

回答

1

SNMP不是一个可扩展协议,允许您向其添加新的操作。因此在法律上,你实际上无法做到这一点。 RFC将PDU限制为现有的PDU。 GETBULK是从代理收集大量信息的最有效方式,即使它在使用它时有其自身的问题(例如数据溢出)。

+0

是的,数据溢出/多重请求问题正是我想要处理的。然而,我读过的各种页面和论文都是关于实现'getSubtree'操作的(他们与标准的操作并行)。我见过一个提案(用RFC风格编写)。我已经看到了一个使用SET和多个陷阱进行响应的MIB。虽然我同意拥有标准操作系统是合法的,但我试图发现/复制这些其他操作系统。你碰到过吗?设置来自客户端的呼叫很简单,但SNMP4J表示它是无效的类型。 – 2012-02-29 17:46:16

+0

那么,如果你控制客户端和服务器上的代码,那么肯定,你可以添加任何你想要的管理堆栈和服务器端代理。但是,你不再做互操作的SNMP,你正在做一些新的事情。已经有很多要求解决这个问题,但是没有一个是标准化的。一些商业堆栈确实有​​这样的扩展机制,但它们又不能在每个设备上工作[事实上,很少有]。你可以做的最好的事情是找到一个rowcount对象,这样你就可以知道如何设置GETBULK转发器的数量 – 2012-02-29 23:14:17

+0

谢谢,Wes。我确实结束了(至少现在)实现客户端和服务器的一个版本,以在SNMP4J之上提供新的PDU。由于其签名与GET非常相似,因此非常简单。我同意这是非标准的,但因为它是用于我们自己的管理控制台,所以它可能没问题。由于需要发送的数据的大小,它可能只适用于TCP连接,这是我在讨论各种论文中的getSubtree时看到的常见线索。 – 2012-03-01 02:14:55