所以我还在学习SNMP,请放心.我正在使用snmp4j,而不仅仅是库,但是我已经加载了源代码,如果它能得到我需要的东西,我不反对修改源代码.我编写了一个代理和一个测试客户端.我想要做的是能够检查来自测试客户端的请求,特别是监听对特定OID的"设置"请求.
我正在考虑这样做的当前方式是在运行snmp4j方法fireProcessMessage
(位于包中org.snmp4j.transport.DefaultUdpTranportMapping
)后立即捕获请求,但我不知道代理如何查询自己的mib以获取oid.是否存在代理用于从其mib获取OID值的方法?
或者有更好的方法来捕获特定的SET请求吗?甚至可以做我想做的事情吗?基本上我想要做的是如果客户端将某个OID值设置为1(true),则运行另一个进程.
可以通过扩展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 } } }