Networking SNMP4J:SHA/AES-256与网元的通信失败-需要设置哪些所有参数?

Networking SNMP4J:SHA/AES-256与网元的通信失败-需要设置哪些所有参数?,networking,encryption,aes,sha,snmp4j,Networking,Encryption,Aes,Sha,Snmp4j,我尝试使用下面的SNMP4JClinet代码与AES-256/SHAv3模式下的网元通信。它失败,出现下面指定的异常。请让我知道异常后面的代码有什么问题。当网元处于AES256/SHA模式时,是否需要在SNMP4J上设置附加参数 例外情况: org.snmp4j.MessageException: Message processing model 3 returned error: 1405 at org.snmp4j.MessageDispatcherImpl.send

我尝试使用下面的SNMP4JClinet代码与AES-256/SHAv3模式下的网元通信。它失败,出现下面指定的异常。请让我知道异常后面的代码有什么问题。当网元处于AES256/SHA模式时,是否需要在SNMP4J上设置附加参数

例外情况:

org.snmp4j.MessageException: Message processing model 3 returned error: 1405
            at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:422)
            at org.snmp4j.Snmp.sendMessage(Snmp.java:955)
            at org.snmp4j.Snmp.send(Snmp.java:802)
            at org.snmp4j.Snmp.send(Snmp.java:758)
            at org.snmp4j.Snmp.getBulk(Snmp.java:571)
            at SNMP4JClinet.main(SNMP4JClinet.java:88)
资料来源:

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Vector;
import org.snmp4j.CommunityTarget;
import org.snmp4j.PDU;
import org.snmp4j.Snmp;
import org.snmp4j.UserTarget;
import org.snmp4j.security.AuthMD5;
import org.snmp4j.security.AuthSHA;
import org.snmp4j.security.PrivAES128;
import org.snmp4j.security.PrivAES256;
import org.snmp4j.security.SecurityLevel;
import org.snmp4j.security.SecurityModels;
import org.snmp4j.security.Sec;urityProtocols;
import org.snmp4j.security.USM;
import org.snmp4j.security.UsmUser;
import org.snmp4j.smi.*;
import org.snmp4j.mp.*;
import org.snmp4j.transport.DefaultUdpTransportMapping;
import org.snmp4j.event.ResponseEvent;
import org.snmp4j.*; 
public class SNMP4JClinet
{

    public static void main(String[] args) {
        try {
            Snmp snmp = new Snmp(new DefaultUdpTransportMapping());

            USM usm = new USM(SecurityProtocols.getInstance(),
                                            new OctetString(MPv3.createLocalEngineID()), 0);
            SecurityModels.getInstance().addSecurityModel(usm);
            snmp.listen();

            List<String>  ipAddresses = new ArrayList<String>();
            ipAddresses.add("x.x.x.x");


            List<UserTarget>  target = new ArrayList<UserTarget>();
            for (String ipAddress : ipAddresses) {
                UserTarget userTarget = new UserTarget();
                userTarget.setAddress(GenericAddress.parse("udp:"+ipAddress+"/161"));
                userTarget.setSecurityName(new OctetString("v3userdeafult"));
                userTarget.setVersion(SnmpConstants.version3);
                userTarget.setSecurityLevel(SecurityLevel.AUTH_PRIV);
                userTarget.setTimeout(10000);
                userTarget.setRetries(0);

                target.add(userTarget);
            }

            UsmUser user1 = new UsmUser(new OctetString("v3userdeafult"),
                    AuthSHA.ID,
                    new OctetString("v3authapass"),
                    PrivAES256.ID,
                    new OctetString("v3defprivpass"));


            System.out.println(target.get(0).getAddress());
            byte[] authEngineId0 =snmp.discoverAuthoritativeEngineID(target.get(0).getAddress(), 5000);


            OctetString o1=new OctetString("v3DefaultUser");
            OctetString o2 = new OctetString(authEngineId0);
            snmp.getUSM().addUser(o1, o2,user1);

            ResponseEvent responseEvent=null;
            PDU responsePDU=null;


            PDU pdu = new ScopedPDU();
            pdu.setNonRepeaters(1);
            pdu.setType(PDU.GETBULK);
            pdu.add(new VariableBinding(new OID("1.3.6.1.4.1.7483.2.1.1.2.1.4")));


            responseEvent = snmp.getBulk(pdu, target.get(0));

            if (responseEvent != null)
            {
                responsePDU = responseEvent.getResponse();
                if ( responsePDU != null)
                {
                    Vector <VariableBinding> tmpv =  (Vector<VariableBinding>) responsePDU.getVariableBindings();
                    if(tmpv != null)
                    {
                        for(int k=0; k <tmpv.size();k++)
                        {
                            VariableBinding vb = (VariableBinding) tmpv.get(k);
                            String output = null;
                            if ( vb.isException())
                            {
                                String errorstring = vb.getVariable().getSyntaxString();
                                System.out.println("Error:"+errorstring);
                            }
                            else
                            {
                                String sOid = vb.getOid().toString();
                                Variable var = vb.getVariable();
                                //OctetString oct = new OctetString((OctetString)var);
                                String sVar =  var.toString();

                                System.out.println("success:"+sVar);
                            }
                        }
                    }
                }
            }
        }
        catch (IOException e) {
            e.printStackTrace();
        }
    }
}

你介意用更少的缩进来编辑这个吗?很难按原样阅读。我怀疑问题出在代码UsmUser user1=new UsmUsernew OctetStringv3userdeafult、AuthSHA.ID、new OctetStringv3authapass、privas256.ID的下面部分,新的OctetStringv3defprivpass;与AuthMD5和PrivAES128相同的代码适用于v3-AES128模式下的网元。但当我修改上述代码以在AES-256中与网元通信时,它失败了。我需要设置一些其他参数吗?我已经将SHA标记更改为Java,以获得最大曝光量。SHA标记有9个跟随者,Java此时有54.6K跟随者。作为奖励,该标记还将用于执行语法突出显示。感谢您更改格式