snmp4j发送v3trap

最近在做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();        }    }
(0)

相关推荐