To send a broadcast SNMP message to a target, simply
noAuthNoPriv
security level (broadcast with authentication does not work obviously)For example:
.h5 Setup a Snmp instance and let it listen to responses
TransportMapping transport = new DefaultUdpTransportMapping(); Session snmp = new Snmp(transport); USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0); SecurityModels.getInstance().addSecurityModel(usm); snmp.listen(); |
.h5 Create a broadcast target:
Address targetAddress = GenericAddress.parse("udp:255.255.255.255/161"); |
CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(targetAddress); target.setRetries(1); target.setTimeout(5000); target.setVersion(SnmpConstants.version1); |
CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString("public")); target.setAddress(targetAddress); target.setRetries(1); target.setTimeout(5000); target.setVersion(SnmpConstants.version2c); |
UserTarget target = new UserTarget(); target.setAddress(targetAddress); target.setRetries(1); target.setTimeout(5000); target.setVersion(SnmpConstants.version3); target.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV); target.setSecurityName(new OctetString("unsecUser")); |
.h5 Create the PDU
PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,1}))); pdu.add(new VariableBinding(new OID(new int[] {1,3,6,1,2,1,1,2}))); pdu.setType(PDU.GETNEXT); |
.h5 Send the message asynchronously
boolean ResponseListener listener = new ResponseListener() { public void onResponse(ResponseEvent event) { System.out.println("Received response PDU is: "+event.getResponse()); if (event.getResponse() == null) { listener.notify(); } } }; snmp.sendPDU(pdu, target, null, listener); try { listener.wait(target.getTimeout()*2); } catch (InterruptedException iex) { System.out.println("Request cancelled: "+iex.getMessage()); } |