所以我还在学习SNMP,请放心。我正在使用snmp4j,而不仅仅是库,但是我已经加载了源代码,如果它能得到我需要的东西,我不反对修改源代码。我编写了一个代理和一个测试客户端。我想要做的是能够检查来自测试客户端的请求,特别是监听对特定OID的“设置”请求。
我正在考虑这样做的当前方式是在运行snmp4j方法fireProcessMessage
(位于包org.snmp4j.transport.DefaultUdpTranportMapping
)之后立即捕获请求但我不知道代理如何查询它自己的一个oid的mib。是否存在代理用于从其mib获取OID值的方法?
或有没有更好的方法来捕获特定的 SET 请求?甚至可以做我想做的事情吗?基本上我想要做的是如果客户端将某个OID值设置为1(true),则运行另一个进程。
答案 0 :(得分:11)
可以通过扩展CommandProcessor来完成 并实施RequestHandler
像我做的一样public class SNMPRequestProcessor extends CommandProcessor
{
SetHandler setHandler = new SetHandler ();
public SNMPRequestProcessor()
{
//Your code
}
@Override
protected void processRequest(CommandResponderEvent command, CoexistenceInfo cinfo, RequestHandler handler)
{
synchronized (command) {
if (command.getPDU().getType() == PDU.SET) {
super.processRequest(command, cinfo, setHandler);
}
super.processRequest(command, cinfo, handler);
}
}
/**
* Handler for process set request which update to the database
*
*/
class SetHandler implements RequestHandler
{
@Override
public boolean isSupported(int mode)
{
return mode == PDU.SET;
}
@Override
public void processPdu(Request request, MOServer server)
{
//your code
}
}
}
答案 1 :(得分:0)
我没有使用snmp4j的代理方面的经验,但我建议在官方邮件列表上提出这个问题:http://lists.agentpp.org/pipermail/snmp4j/。这是非常活跃的,你会在几个小时内得到一个很好的答案。