SNMP服务器连接

时间:2011-09-14 13:28:51

标签: snmp

我正在向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);

3 个答案:

答案 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