最近在做snmp的trapV3模拟发送,网上看到的大多数博客没有太详细的介绍,自己瞎摸索了一下
- NoAuthNoPriv方式就像名称一样,无验证也无加密
- public void sendSnmpV3WithNoAuthNoPriv(Snmp snmp, Address targetAddr) {
SNMP4JSettings.setExtensibilityEnabled(true); - SecurityProtocols.getInstance().addDefaultProtocols();
- UserTarget userTarget = new UserTarget();
- DefaultUdpTransportMapping udpTransportMap = null;
- try {
- udpTransportMap = new DefaultUdpTransportMapping();
- }catch (Exception e) {
- e.printStackTrace();
- }
- //engingId可用于进一步做trap的细分和验证,接收时可以不验证
- byte[] enginId = MPv3.createLocalEngineID();
- USM v3Usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);
- SecurityModels securityModels = SecurityModels.getInstance();
- securityModels.addSecurityModel(v3Usm);
- userTarget.setRetries(2);
- userTarget.setTimeout(3000);
- userTarget.setVersion(SnmpConstants.version3);
- userTarget.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV);
- userTarget.setAddress(targetAddr);
- //NOAUTH_NOPRIV和v1,v2c类似,可以直接接收,不验证SecurityName
- //userTarget.setSecurityName(new OctetString("snmpV3TestUser"));
- ScopedPDU v3pdu = new ScopedPDU();
- v3pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("what's wrong中文测试!")));
- snmp.setLocalEngine(enginId, 500, 1);
- try {
- ResponseEvent response = snmp.send(v3pdu, userTarget);
- if (response.getRequest() == null) {
- // request timed out
- System.out.println("no response");
- } else {
- System.out.println("Received response from: "
- + response.getSource());
- // dump response PDU
- System.out.println(response.getRequest().toString());
- //显示发送的信息状态。
- }
- }catch (Exception e) {
- e.printStackTrace();
- }
-
- AUTH_NOPRIV会验证SecurityName,authenticationPass,对于privacyPassp的正确性不会验证
- public void sendSnmpV3WithAuthAndPriv(Snmp snmp, Address targetAddr) {
- OctetString securityName = new OctetString("securityName");
- OctetString passWord = new OctetString("snmpV3TestPassword");
- OctetString privStr = new OctetString("snmpV3TestPriv");
- SNMP4JSettings.setExtensibilityEnabled(true);
- byte[] enginId = "TEO_ID".getBytes();
- USM v3Usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);
- SecurityProtocols.getInstance().addDefaultProtocols();
- UserTarget userTarget = new UserTarget();
- userTarget.setVersion(SnmpConstants.version3);
- userTarget.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
- userTarget.setAddress(targetAddr);
- userTarget.setSecurityName(securityName);
- userTarget.setRetries(2);
- userTarget.setTimeout(3000);
- SecurityModels securityModels = SecurityModels.getInstance();
- securityModels.addSecurityModel(v3Usm);
//此处五个参数分别为securityName,authentication密码加密,
//authenticationPassphrase,privacyPass加密方式,privacyPassphrase
- snmp.getUSM().addUser(securityName, new UsmUser(securityName, AuthMD5.ID, passWord, PrivDES.ID, privStr));
ScopedPDU v3pdu = new ScopedPDU(); v3pdu.setType(PDU.NOTIFICATION);
v3pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("what's wrong中文测试!")));
snmp.setLocalEngine(enginId, 500, 1);
try { ResponseEvent response = snmp.send(v3pdu, userTarget);
if (response.getRequest() == null) { // request timed out System.out.println("no response"); }
else { System.out.println("Received response from: " + response.getSource()); // dump response PDU
System.out.println(response.getRequest().toString()); //显示发送的信息状态。
}
}catch (Exception e)
{ e.printStackTrace(); } }
AUTH_PRIV则是会验证SecurityName,authenticationPass,privacyPass
- public void sendSnmpV3WithAuthAndNoPriv(Snmp snmp, Address targetAddr) {
- OctetString securityName = new OctetString("111222333");
- OctetString passWord = new OctetString("111222555");
- OctetString privStr = new OctetString("23152156");
- SNMP4JSettings.setExtensibilityEnabled(true);
- byte[] enginId = "TEO_ID".getBytes();
- USM v3Usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);
- SecurityProtocols.getInstance().addDefaultProtocols();
- UserTarget userTarget = new UserTarget();
- userTarget.setVersion(SnmpConstants.version3);
- userTarget.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
- userTarget.setAddress(targetAddr);
- userTarget.setSecurityName(securityName);
- userTarget.setRetries(2);
- userTarget.setTimeout(3000);
- SecurityModels securityModels = SecurityModels.getInstance();
- securityModels.addSecurityModel(v3Usm);
- snmp.getUSM().addUser(securityName, new UsmUser(securityName, AuthSHA.ID, passWord, PrivDES.ID,privStr));
- ScopedPDU v3pdu = new ScopedPDU();
- v3pdu.setType(PDU.NOTIFICATION);
- v3pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("what's wrong中文测试!")));
- snmp.setLocalEngine(enginId, 500, 1);
- try {
- ResponseEvent response = snmp.send(v3pdu, userTarget);
- if (response.getRequest() == null) {
- // request timed out
- System.out.println("no response");
- } else {
- System.out.println("Received response from: "
- + response.getSource());
- // dump response PDU
- System.out.println(response.getRequest().toString());
- //显示发送的信息状态。
- }
- }catch (Exception e) {
- e.printStackTrace();
- }
- }