如何使用 SNMP4J 在 OID / Managed Object 上注册侦听器以处理 set 或 get 代理收到的请求?
How to register a listener on a OID / Managed Object using SNMP4J to act on set or get requests the agent receives?
我需要在我的应用程序中实现一个基本的 snmp
代理。该代理应该能够自己 OID's
回答来自 snmp
浏览器的获取和设置请求。由于 snmp4j
的大多数示例都相当陈旧,并且使用“扩展 org.snmp4j.agent.BaseAgent.classapproach"
,所以用处不大。
因此试图理解并剥离snmp4j-agent-3.2.1.jar
中的org.snmp4j.agent.example.SampleAgentincluded
。我设法得到一个仅使用强制性 MIB 的示例(我至少认为它们是必需的,因为 AgentConfigManager
的来源在评论中声明它们是强制性的 snmpv2MIB、snmpMpdMib、targetMIB、communityMIB, notificationMIB, frameworkMIB, usmMIB, vacmMIB, tlsTmMib ) 由示例配置文件提供。
我添加了自定义 OID
以使用以下代码查询代理
MOServer server = new DefaultMOServer();
MOServer[] moServers = new MOServer[]{server};
...
AgentConfigManager agent = new AgentConfigManager(new OctetString(MPv3.createLocalEngineID()),
messageDispatcher,
null,
moServers,
ThreadPool.create("SampleAgent", 3),
configurationFactory,
new DefaultMOPersistenceProvider(moServers, configFile),
new EngineBootsCounterFile(bootCounterFile), null, dhKickstartParameters);
...
agent.initialize();
...
server.register(new MOScalar(new OID("1.someIODshere.0"), MOAccessImpl.ACCESS_READ_ONLY, new OctetString("object 1")), null);
现在我缺少一种方法来拦截来自 snmp
管理器/浏览器的获取或设置请求到 return 动态值或根据请求更改程序行为。
我有点希望能够将一种事件侦听器绑定到此 OID
以获得有关请求/更改的通知。
如何观看 OID
?
我找到了。我看错地方了。我以为必须向代理添加一个侦听器,但我必须将侦听器添加到服务器。
server.addLookupListener(new MOServerLookupListener() {
@Override
public void lookupEvent(MOServerLookupEvent event) {
System.out.println();
((MOScalar)event.getLookupResult()).setValue(new OctetString(new Date().toString()));
}
@Override
public void queryEvent(MOServerLookupEvent event) {
System.out.println();
}
},moScalar);
我现在可以对请求做出反应。耶!
我需要在我的应用程序中实现一个基本的 snmp
代理。该代理应该能够自己 OID's
回答来自 snmp
浏览器的获取和设置请求。由于 snmp4j
的大多数示例都相当陈旧,并且使用“扩展 org.snmp4j.agent.BaseAgent.classapproach"
,所以用处不大。
因此试图理解并剥离snmp4j-agent-3.2.1.jar
中的org.snmp4j.agent.example.SampleAgentincluded
。我设法得到一个仅使用强制性 MIB 的示例(我至少认为它们是必需的,因为 AgentConfigManager
的来源在评论中声明它们是强制性的 snmpv2MIB、snmpMpdMib、targetMIB、communityMIB, notificationMIB, frameworkMIB, usmMIB, vacmMIB, tlsTmMib ) 由示例配置文件提供。
我添加了自定义 OID
以使用以下代码查询代理
MOServer server = new DefaultMOServer();
MOServer[] moServers = new MOServer[]{server};
...
AgentConfigManager agent = new AgentConfigManager(new OctetString(MPv3.createLocalEngineID()),
messageDispatcher,
null,
moServers,
ThreadPool.create("SampleAgent", 3),
configurationFactory,
new DefaultMOPersistenceProvider(moServers, configFile),
new EngineBootsCounterFile(bootCounterFile), null, dhKickstartParameters);
...
agent.initialize();
...
server.register(new MOScalar(new OID("1.someIODshere.0"), MOAccessImpl.ACCESS_READ_ONLY, new OctetString("object 1")), null);
现在我缺少一种方法来拦截来自 snmp
管理器/浏览器的获取或设置请求到 return 动态值或根据请求更改程序行为。
我有点希望能够将一种事件侦听器绑定到此 OID
以获得有关请求/更改的通知。
如何观看 OID
?
我找到了。我看错地方了。我以为必须向代理添加一个侦听器,但我必须将侦听器添加到服务器。
server.addLookupListener(new MOServerLookupListener() {
@Override
public void lookupEvent(MOServerLookupEvent event) {
System.out.println();
((MOScalar)event.getLookupResult()).setValue(new OctetString(new Date().toString()));
}
@Override
public void queryEvent(MOServerLookupEvent event) {
System.out.println();
}
},moScalar);
我现在可以对请求做出反应。耶!