我正在向SNMP服务器发送SNMP陷阱。但是如果没有建立与服务器的连接,我必须打印日志。
UdpAddress targetAddress = new UdpAddress("127.0.0.1/1985");
CommunityTarget target = new CommunityTarget();
target.setCommunity(new OctetString("public"));
target.setAddress(targetAddress);
target.setRetries(2);
target.setTimeout(1000);
target.setVersion(SnmpConstants.version1);
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
// prepare the PDU for sending
PDU command = new PDU();
command.setType(PDU.GET);
command.add(new VariableBinding(new
OID("1.3.6.1.4.1.1331.11.5.1.0")));
// now send the PDU
**// I HAVE TO CHECK WETHER CONNECTION IS ESTABLISHED OR NOT WITH SNMP SERVER. AS OF
NOW EVEN IF I DO NOT START SNMP SERVER THAN I AM NOT GETTING ANY EXCEPTION and IF I START
SNMP SERVER THEN MESSAGE HAS BEEN SENT TO SNMP SERVER.....MAY BE IN SEND METHOD..ITS
CONNECTS WITH SNMP SERVER....BUT I TRIED TO FIND OUT BUT COULDNT ABLE TO DO IT.....**
ResponseEvent responseEvent = snmp.send(pdu, target);
答案 0 :(得分:5)
UDP是无连接的,所以在这种情况下你无法知道是否收到了数据包。
答案 1 :(得分:0)
因为您被告知UDP是无连接的,所以在这种情况下您无法知道是否接收到数据包。
,但是如果您真的必须在发送陷阱之前知道SNMP管理器仍处于活动状态。您可以创建自己的握手。
逻辑很简单,它是这样的:
1) create in the MIB new leaf to indicates if the manager is connected and initial it to false.
2) send a trap to the manager.
2.1) if the manager is alive (receive the trap)
2.1.1) the manager send a set-request to the leaf with true.
代理可以从MIB上的值读取值,并知道管理器是否正在监听陷阱
您可以扩展和改进逻辑,但是我认为基本思路很清楚
答案 2 :(得分:-1)
虽然您想在代码中发送SNMP陷阱/通知,但您正在执行以下操作
PDU command = new PDU();
command.setType(PDU.GET);
以上将导致发送SNMP get请求,理想情况下应该获取响应但是端口号(源或客户端的源地址)是您应该监听的位置。上面的代码片段有一些基本的缺陷,因此您无法获得理想的结果。
您可能希望在SNMP4j上阅读一些链接以发送通知
https://www.jayway.com/2010/05/21/introduction-to-snmp4j/
http://lists.agentpp.org/pipermail/snmp4j/2006-April/001219.html