最近在做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(); } }
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/250033.html
標籤:Java
上一篇:史上最全Java8日期時間工具類
下一篇:Java泛型
