use of org.snmp4j.transport.DefaultUdpTransportMapping in project opennms by OpenNMS.
the class Snmp4JStrategy method registerForTraps.
@Override
public void registerForTraps(final TrapNotificationListener listener, InetAddress address, int snmpTrapPort, List<SnmpV3User> snmpUsers) throws IOException {
final RegistrationInfo info = new RegistrationInfo(listener, address, snmpTrapPort);
final Snmp4JTrapNotifier trapNotifier = new Snmp4JTrapNotifier(listener);
info.setHandler(trapNotifier);
final UdpAddress udpAddress;
if (address == null) {
udpAddress = new UdpAddress(snmpTrapPort);
} else {
udpAddress = new UdpAddress(address, snmpTrapPort);
}
// Set socket option SO_REUSEADDR so that we can bind to the port even if it
// has recently been closed by passing 'true' as the second argument here.
final DefaultUdpTransportMapping transport = new DefaultUdpTransportMapping(udpAddress, true);
// Increase the receive buffer for the socket
LOG.debug("Attempting to set receive buffer size to {}", Integer.MAX_VALUE);
transport.setReceiveBufferSize(Integer.MAX_VALUE);
LOG.debug("Actual receive buffer size is {}", transport.getReceiveBufferSize());
info.setTransportMapping(transport);
Snmp snmp = new Snmp(transport);
snmp.addCommandResponder(trapNotifier);
if (snmpUsers != null) {
for (SnmpV3User user : snmpUsers) {
SnmpAgentConfig config = new SnmpAgentConfig();
config.setVersion(SnmpConfiguration.VERSION3);
config.setSecurityName(user.getSecurityName());
config.setAuthProtocol(user.getAuthProtocol());
config.setAuthPassPhrase(user.getAuthPassPhrase());
config.setPrivProtocol(user.getPrivProtocol());
config.setPrivPassPhrase(user.getPrivPassPhrase());
Snmp4JAgentConfig agentConfig = new Snmp4JAgentConfig(config);
UsmUser usmUser = new UsmUser(agentConfig.getSecurityName(), agentConfig.getAuthProtocol(), agentConfig.getAuthPassPhrase(), agentConfig.getPrivProtocol(), agentConfig.getPrivPassPhrase());
/* This doesn't work as expected. Basically SNMP4J is ignoring the engineId
if (user.getEngineId() == null) {
snmp.getUSM().addUser(agentConfig.getSecurityName(), usmUser);
} else {
snmp.getUSM().addUser(agentConfig.getSecurityName(), new OctetString(user.getEngineId()), usmUser);
}
*/
snmp.getUSM().addUser(agentConfig.getSecurityName(), usmUser);
}
}
info.setSession(snmp);
s_registrations.put(listener, info);
snmp.listen();
}
use of org.snmp4j.transport.DefaultUdpTransportMapping in project opennms by OpenNMS.
the class Snmp4jTrapReceiverIT method testTrapReceiverWithoutOpenNMS.
/*
* IMPORTANT:
*
* The sentence <code>snmp.getUSM().addUser(...)</code>, is the only requirement
* in order to properly process SNMPv3 traps.
*
* This is related with the credentials that should be created for Trapd in order
* to properly authenticate and/or decode SNMPv3 traps in OpenNMS.
*
* This is a user that should be configured (or should be used) by the external
* devices to send SNMPv3 Traps to OpenNMS.
*
* The SNMPv3 users should be configured in trapd-configuration.xml
*/
@Test
public void testTrapReceiverWithoutOpenNMS() throws Exception {
final Snmp4JStrategy strategy = new Snmp4JStrategy();
assertEquals(0, m_trapCount);
LOG.debug("SNMP4J: Register for Traps");
DefaultUdpTransportMapping transportMapping = null;
Snmp snmp = null;
try {
// Set socket option SO_REUSEADDR so that we can bind to the port even if it
// has recently been closed by passing 'true' as the second argument here.
transportMapping = new DefaultUdpTransportMapping(new UdpAddress(9162), true);
snmp = new Snmp(transportMapping);
snmp.addCommandResponder(this);
snmp.getUSM().addUser(new OctetString("opennmsUser"), new UsmUser(new OctetString("opennmsUser"), AuthMD5.ID, new OctetString("0p3nNMSv3"), PrivDES.ID, new OctetString("0p3nNMSv3")));
snmp.listen();
sendTraps(strategy, SnmpConfiguration.AUTH_PRIV);
await().atMost(5, SECONDS).until(() -> m_trapCount, equalTo(2));
} finally {
LOG.debug("SNMP4J: Unregister for Traps");
if (snmp != null) {
try {
snmp.close();
} catch (final IOException e) {
LOG.debug("Failed to close Snmp object: {}", snmp, e);
}
}
if (transportMapping != null) {
try {
transportMapping.close();
} catch (final IOException e) {
LOG.debug("Failed to close transport mapping: {}", transportMapping, e);
}
}
}
LOG.debug("SNMP4J: Checking Trap status");
assertEquals(2, m_trapCount);
snmp.getUSM().removeAllUsers();
}
use of org.snmp4j.transport.DefaultUdpTransportMapping in project opennms by OpenNMS.
the class MockAgentTest method testGetSysName.
public void testGetSysName() throws IOException {
Snmp snmp = new Snmp(new DefaultUdpTransportMapping());
snmp.listen();
Address addr = new UdpAddress(InetAddress.getLocalHost(), 9161);
//Address addr = new UdpAddress(InetAddressUtils.addr("192.168.0.100"), 161);
Target target = new CommunityTarget(addr, new OctetString("public"));
target.setVersion(SnmpConstants.version1);
target.setTimeout(3000);
target.setRetries(3);
PDUv1 getRequest = new PDUv1();
getRequest.add(new VariableBinding(new OID("1.3.6.1.2.1.1.5.0")));
ResponseEvent e = snmp.get(getRequest, target);
PDU response = e.getResponse();
assertEquals(new OctetString("mockhost"), response.get(0).getVariable());
}
use of org.snmp4j.transport.DefaultUdpTransportMapping in project opennms by OpenNMS.
the class MockSnmpAgentIT method sendRequestV3.
private PDU sendRequestV3(PDU pdu) {
PDU response = null;
OctetString userId = new OctetString("opennmsUser");
OctetString pw = new OctetString("0p3nNMSv3");
UserTarget target = new UserTarget();
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(userId);
target.setAddress(new UdpAddress(InetAddressUtils.addr("127.0.0.1"), m_agent.getPort()));
target.setVersion(SnmpConstants.version3);
target.setTimeout(DEFAULT_TIMEOUT);
TransportMapping<UdpAddress> transport = null;
Snmp snmp = null;
try {
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
transport = new DefaultUdpTransportMapping();
snmp = new Snmp(transport);
UsmUser user = new UsmUser(userId, AuthMD5.ID, pw, PrivDES.ID, pw);
snmp.getUSM().addUser(userId, user);
transport.listen();
ResponseEvent e = snmp.send(pdu, target);
response = e.getResponse();
} catch (final IOException e) {
e.printStackTrace();
} finally {
if (snmp != null) {
try {
snmp.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
if (transport != null) {
try {
transport.close();
} catch (final IOException e) {
e.printStackTrace();
}
}
}
return response;
}
use of org.snmp4j.transport.DefaultUdpTransportMapping in project opennms by OpenNMS.
the class BrocadeMibIT method sendRequestV3.
private PDU sendRequestV3(PDU pdu) throws IOException {
PDU response;
OctetString userId = new OctetString("opennmsUser");
OctetString pw = new OctetString("0p3nNMSv3");
UserTarget target = new UserTarget();
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
target.setSecurityName(userId);
target.setAddress(new UdpAddress(m_agent.getInetAddress(), m_agent.getPort()));
target.setVersion(SnmpConstants.version3);
target.setTimeout(5000);
TransportMapping<UdpAddress> transport = null;
try {
USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
SecurityModels.getInstance().addSecurityModel(usm);
transport = new DefaultUdpTransportMapping();
Snmp snmp = new Snmp(transport);
UsmUser user = new UsmUser(userId, AuthMD5.ID, pw, PrivDES.ID, pw);
snmp.getUSM().addUser(userId, user);
transport.listen();
ResponseEvent e = snmp.send(pdu, target);
response = e.getResponse();
} finally {
if (transport != null) {
transport.close();
}
}
return response;
}
Aggregations