4

所以我还在学习SNMP的过程中,请放轻松。我正在使用 snmp4j,而不仅仅是库,而且我已经加载了源代码,如果它可以满足我的需要,我不反对修改源代码。我已经编写了一个代理和一个测试客户端。我想要做的是能够检查来自测试客户端的请求,并专门监听对特定 OID 的“设置”请求。

我正在考虑的当前方法是在运行 snmp4j 方法fireProcessMessage(位于包中org.snmp4j.transport.DefaultUdpTranportMapping)后立即捕获请求,但我不知道代理如何查询自己的 mib 以获取 oid。代理是否有一种方法可以从其 mib 中获取 OID 值?

或者有没有更好的方法来捕获特定的SET请求?甚至可以做我想做的事吗?基本上,如果客户端将某个 OID 值设置为 1(true),我想要做的是运行另一个进程。

4

2 回答 2

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
    }
}

}
于 2013-02-11T12:35:07.687 回答
0

我对 snmp4j 的代理方面没有经验,但我建议在官方邮件列表中提出这个问题:http: //lists.agentpp.org/pipermail/snmp4j/。它非常活跃,您将在几个小时内得到一个很好的答案。

于 2011-08-06T00:08:17.500 回答