经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » Java » 查看文章
snmp4j发送v3trap
来源:cnblogs  作者:三鹿纯鲜  时间:2021/1/18 16:44:41  对本文有异议

最近在做snmp的trapV3模拟发送,网上看到的大多数博客没有太详细的介绍,自己瞎摸索了一下

 

  1. NoAuthNoPriv方式就像名称一样,无验证也无加密
  1.  public void sendSnmpV3WithNoAuthNoPriv(Snmp snmp, Address targetAddr) {
    SNMP4JSettings.setExtensibilityEnabled(true);
  2. SecurityProtocols.getInstance().addDefaultProtocols();
  3. UserTarget userTarget = new UserTarget();
  4. DefaultUdpTransportMapping udpTransportMap = null;
  5. try {
  6. udpTransportMap = new DefaultUdpTransportMapping();
  7. }catch (Exception e) {
  8. e.printStackTrace();
  9. }
  10. //engingId可用于进一步做trap的细分和验证,接收时可以不验证
  11. byte[] enginId = MPv3.createLocalEngineID();
  12. USM v3Usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);
  13. SecurityModels securityModels = SecurityModels.getInstance();
  14. securityModels.addSecurityModel(v3Usm);
  15. userTarget.setRetries(2);
  16. userTarget.setTimeout(3000);
  17. userTarget.setVersion(SnmpConstants.version3);
  18. userTarget.setSecurityLevel(SecurityLevel.NOAUTH_NOPRIV);
  19. userTarget.setAddress(targetAddr);
  20. //NOAUTH_NOPRIV和v1,v2c类似,可以直接接收,不验证SecurityName
  21. //userTarget.setSecurityName(new OctetString("snmpV3TestUser"));
  22. ScopedPDU v3pdu = new ScopedPDU();
  23. v3pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("what's wrong中文测试!")));
  24. snmp.setLocalEngine(enginId, 500, 1);
  25. try {
  26. ResponseEvent response = snmp.send(v3pdu, userTarget);
  27. if (response.getRequest() == null) {
  28. // request timed out
  29. System.out.println("no response");
  30. } else {
  31. System.out.println("Received response from: "
  32. + response.getSource());
  33. // dump response PDU
  34. System.out.println(response.getRequest().toString());
  35. //显示发送的信息状态。
  36. }
  37. }catch (Exception e) {
  38. e.printStackTrace();
  39. }
  1.  
  1. AUTH_NOPRIV会验证SecurityNameauthenticationPass,对于privacyPassp的正确性不会验证
  1. public void sendSnmpV3WithAuthAndPriv(Snmp snmp, Address targetAddr) {
  2. OctetString securityName = new OctetString("securityName");
  3. OctetString passWord = new OctetString("snmpV3TestPassword");
  4. OctetString privStr = new OctetString("snmpV3TestPriv");
  5. SNMP4JSettings.setExtensibilityEnabled(true);
  6. byte[] enginId = "TEO_ID".getBytes();
  7. USM v3Usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);
  8. SecurityProtocols.getInstance().addDefaultProtocols();
  9. UserTarget userTarget = new UserTarget();
  10. userTarget.setVersion(SnmpConstants.version3);
  11. userTarget.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
  12. userTarget.setAddress(targetAddr);
  13. userTarget.setSecurityName(securityName);
  14. userTarget.setRetries(2);
  15. userTarget.setTimeout(3000);
  16. SecurityModels securityModels = SecurityModels.getInstance();
  17. securityModels.addSecurityModel(v3Usm);
         //此处五个参数分别为
    securityName,authentication密码加密,
    //authenticationPassphrase,privacyPass加密方式,privacyPassphrase
  1. 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(); } }

  1. AUTH_PRIV则是会验证SecurityNameauthenticationPassprivacyPass
  1. public void sendSnmpV3WithAuthAndNoPriv(Snmp snmp, Address targetAddr) {
  2. OctetString securityName = new OctetString("111222333");
  3. OctetString passWord = new OctetString("111222555");
  4. OctetString privStr = new OctetString("23152156");
  5. SNMP4JSettings.setExtensibilityEnabled(true);
  6. byte[] enginId = "TEO_ID".getBytes();
  7. USM v3Usm = new USM(SecurityProtocols.getInstance(), new OctetString(enginId), 500);
  8. SecurityProtocols.getInstance().addDefaultProtocols();
  9. UserTarget userTarget = new UserTarget();
  10. userTarget.setVersion(SnmpConstants.version3);
  11. userTarget.setSecurityLevel(SecurityLevel.AUTH_NOPRIV);
  12. userTarget.setAddress(targetAddr);
  13. userTarget.setSecurityName(securityName);
  14. userTarget.setRetries(2);
  15. userTarget.setTimeout(3000);
  16. SecurityModels securityModels = SecurityModels.getInstance();
  17. securityModels.addSecurityModel(v3Usm);
  18. snmp.getUSM().addUser(securityName, new UsmUser(securityName, AuthSHA.ID, passWord, PrivDES.ID,privStr));
  19. ScopedPDU v3pdu = new ScopedPDU();
  20. v3pdu.setType(PDU.NOTIFICATION);
  21. v3pdu.add(new VariableBinding(SnmpConstants.sysDescr,new OctetString("what's wrong中文测试!")));
  22. snmp.setLocalEngine(enginId, 500, 1);
  23. try {
  24. ResponseEvent response = snmp.send(v3pdu, userTarget);
  25. if (response.getRequest() == null) {
  26. // request timed out
  27. System.out.println("no response");
  28. } else {
  29. System.out.println("Received response from: "
  30. + response.getSource());
  31. // dump response PDU
  32. System.out.println(response.getRequest().toString());
  33. //显示发送的信息状态。
  34. }
  35. }catch (Exception e) {
  36. e.printStackTrace();
  37. }
  38. }

 

原文链接:http://www.cnblogs.com/sunroad/p/14290359.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号