检查通过SNMP进入的请求

时间:2011-08-03 14:43:06

标签: snmp snmp4j

所以我还在学习SNMP,请放心。我正在使用snmp4j,而不仅仅是库,但是我已经加载了源代码,如果它能得到我需要的东西,我不反对修改源代码。我编写了一个代理和一个测试客户端。我想要做的是能够检查来自测试客户端的请求,特别是监听对特定OID的“设置”请求。

我正在考虑这样做的当前方式是在运行snmp4j方法fireProcessMessage(位于包org.snmp4j.transport.DefaultUdpTranportMapping)之后立即捕获请求但我不知道代理如何查询它自己的一个oid的mib。是否存在代理用于从其mib获取OID值的方法?

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

2 个答案:

答案 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/。这是非常活跃的,你会在几个小时内得到一个很好的答案。