我需要在SNMP4J中创建一个代理,但是关于如何开始的文档很差.有没有人有任何SNMP4J的经验,可以给我一个关于如何开始的想法?谢谢.
我需要对各种SNMP库进行可行性研究.目前我正在使用SNMP4J.我的要求是将各种库与其功能进行比较.我无法找到任何有用的参考链接.请有人建议任何链接.
我正在使用SNMP4j在java中编写代理,并且进展顺利.我可以获得并设置有价值(仅限SNMPv1,但v3即将推出).
我的下一个要求是专门登录我的应用程序日志(而不是SNMP4J日志)这三件事:
我使用org.snmp4j.log.LogAdapter将SNMP4j日志记录管道输入到我的调试日志中,但这不是我想要的特定日志记录.
我使用org.snmp4j.event.AuthenticationFailureListener来记录验证失败的时间.这似乎只是SNMPv3,并没有给我失败的用户名.
有谁知道如何做到这一点?听众的建议似乎部分到位,还有更多我找不到的东西吗?我可以使用源代码并在需要的地方添加我自己的日志记录,但这有什么许可证含义?SNMP使用Apache 2.0许可证
我编写了一个简单的程序来了解 snmp4j 异步请求/响应的工作原理:
TransportMapping transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
transport.listen();
Address targetAddress = GenericAddress.parse("udp:192.168.1.116/161");
CommunityTarget target = new CommunityTarget();
target.setAddress(targetAddress);
target.setCommunity(new OctetString("nid"));
target.setRetries(0);
target.setTimeout(30000);
target.setVersion(SnmpConstants.version2c);
ResponseListener listener = new ResponseListener() {
@Override
public void onResponse(ResponseEvent event) {
((Snmp) event.getSource()).cancel(event.getRequest(), this);
System.out.println("Received response PDU is: " + event.getResponse());
System.out.println("response listener thread id: " + Thread.currentThread().getId());
System.out.println("**********************************");
try {
Thread.sleep(5000);
} catch (InterruptedException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
};
System.out.println("main thread id: " + Thread.currentThread().getId());
for …Run Code Online (Sandbox Code Playgroud) 所以我还在学习SNMP,请放心.我正在使用snmp4j,而不仅仅是库,但是我已经加载了源代码,如果它能得到我需要的东西,我不反对修改源代码.我编写了一个代理和一个测试客户端.我想要做的是能够检查来自测试客户端的请求,特别是监听对特定OID的"设置"请求.
我正在考虑这样做的当前方式是在运行snmp4j方法fireProcessMessage(位于包中org.snmp4j.transport.DefaultUdpTranportMapping)后立即捕获请求,但我不知道代理如何查询自己的mib以获取oid.是否存在代理用于从其mib获取OID值的方法?
或者有更好的方法来捕获特定的SET请求吗?甚至可以做我想做的事情吗?基本上我想要做的是如果客户端将某个OID值设置为1(true),则运行另一个进程.
我在Java中有一个SNMP陷阱应用程序,旨在侦听SNMP代理并在JFrame窗口中的JTextArea上打印接收到的SNMP消息.
下面的第一部分是我的源代码,显示了TrapReceiver类的内容.在这个类中,listen方法是充分利用工作的地方.该类在JFrame类中进行实例化,我打算在上面提到的JTeaxtArea上显示消息.我将JTextArea对象的引用,SNMP代理URL和端口发送到TrapReceiver类的构造函数中,然后调用TrapReceiver对象的run方法以在JFrame实例以外的单独线程中开始执行.下面的第二部分展示了我如何在JFrame实例中实例化TrapReeceiver类.
当我运行应用程序时,我注意到JFrame实例(即GUI)正在冻结,并且没有在JFrame实例中提到的JTeaxtArea上打印消息,该实例实例化下面第一部分中所示的类TrapReeceiver.
我的问题是为什么JFrame实例(即GUI)是冻结的,尽管TRapReceiver本身是作为一个单独的线程执行的?此外,我想知道这个冻结问题的可能解决方案是什么.提前致谢.
PS:我已经验证了TrapReceiver工作正常并且可以在没有GUI的情况下作为独立应用程序运行时将消息打印到标准输出,但是由于某些可能的线程同步问题,这个GUI正在以某种方式冻结.我尝试运行TrapReceiver而不用线程,即使在这种情况下,GUI仍然处于冻结状态.
第一部分
package com.[Intenionally removed].snmp;
import java.io.IOException;
import javax.swing.JTextArea;
import org.snmp4j.*;
import org.snmp4j.mp.MPv1;
import org.snmp4j.mp.MPv2c;
import org.snmp4j.security.Priv3DES;
import org.snmp4j.security.SecurityProtocols;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.TcpAddress;
import org.snmp4j.smi.TransportIpAddress;
import org.snmp4j.smi.UdpAddress;
import org.snmp4j.transport.AbstractTransportMapping;
import org.snmp4j.transport.DefaultTcpTransportMapping;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.util.MultiThreadedMessageDispatcher;
import org.snmp4j.util.ThreadPool;
public class TrapReceiver implements CommandResponder, Runnable {
private String targetSnmpAgentURL;
private int targetSnmpAgentPort;
private JTextArea outConsole;
public TrapReceiver() {
}
public TrapReceiver(JTextArea outConsole) {
this.outConsole = outConsole;
}
public TrapReceiver(JTextArea outConsole, String targetSnmpAgentURL, int targetSnmpAgentPort) {
this.targetSnmpAgentURL = targetSnmpAgentURL; …Run Code Online (Sandbox Code Playgroud) 我正在使用snmp来监控一些服务器(主要是win2k3),在我上网的过程中,我找到了Oracle用来监控JVM,JVM-MANAGEMENT-MIB的MIB.到目前为止我用它做的是:
通过这些步骤,我认为我很高兴尝试.所以我用snmp4j创建了一个java程序,当我尝试从JVM mib调用OID时,我遇到了一个错误Request timed out.奇怪的是,我只编译JVM-MANAGEMENT-MIB,所以我应该只能访问那些OID,对吧?但事实并非如此,我仍然可以访问cpu使用情况,进程数量......
那么我错过了什么?谢谢