首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >SNMPv3陷阱发送问题

SNMPv3陷阱发送问题
EN

Stack Overflow用户
提问于 2013-01-21 06:13:06
回答 1查看 3.2K关注 0票数 1

V3陷阱发送privProtocol 3 3DES、AES192AES256在使用SNMP4J创建的陷阱发送器中失败。发生的例外情况如下:

代码语言:javascript
复制
org.snmp4j.MessageException: Message processing model 3 returned error: Unsupported security level
at org.snmp4j.MessageDispatcherImpl.sendPdu(MessageDispatcherImpl.java:501)
at org.snmp4j.Snmp.sendMessage(Snmp.java:1005)
at org.snmp4j.Snmp.send(Snmp.java:885)
at org.snmp4j.Snmp.send(Snmp.java:878)
at org.snmp4j.Snmp.send(Snmp.java:843)

相同的代码适用于privProtocol、DES和AES128以及所有authProtocol。

守则如下:

代码语言:javascript
复制
    USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(
                MPv3.createLocalEngineID()),0);
        SecurityModels.getInstance().addSecurityModel(usm);
        Snmp snmp = new Snmp(transport);

        //Creating USM user according to Security level

        //Security Level: noAuthNoPriv
        if(trapDetails.getSecurityLevel()==1){
            snmp.getUSM().addUser(
                    new OctetString(trapDetails.getUserName()),
                    new UsmUser(new OctetString(trapDetails.getUserName()), null, null,
                            null,null));
            }

        //Security Level:AuthNoPriv
        if(trapDetails.getSecurityLevel()==2){
            snmp.getUSM().addUser(
                    new OctetString(trapDetails.getUserName()),
                    new UsmUser(new OctetString(trapDetails.getUserName()), new OID(
                            trapDetails.getAuthProtocol()), new OctetString(trapDetails.getAuthPassword()),
                            null,null));
            }

        //Security Level:AuthPriv
        if(trapDetails.getSecurityLevel()==3){
        snmp.getUSM().addUser(
                new OctetString(trapDetails.getUserName()),
                new UsmUser(new OctetString(trapDetails.getUserName()), new OID(
                        trapDetails.getAuthProtocol()), new OctetString(trapDetails.getAuthPassword()),
                        new OID (trapDetails.getPrivProtocol()),new OctetString(trapDetails.getPrivPassword())));
        }

.

代码语言:javascript
复制
//Creating PDU

        ScopedPDU pdu= new ScopedPDU();
        pdu.setType(PDU.NOTIFICATION);
        pdu.setRequestID(new Integer32(200));
        pdu.setErrorIndex(0);
        pdu.setErrorStatus(SnmpConstants.SNMP_ERROR_BAD_VALUE);
        pdu.add(new VariableBinding(SnmpConstants.sysUpTime,new TimeTicks(255)));
        pdu.add(new VariableBinding(SnmpConstants.snmpTrapOID, new OID(trapDetails
                .getTrapOID())));
        pdu.add(new VariableBinding(SnmpConstants.snmpTrapEnterprise,new OID(SnmpConstants.snmpTrapEnterprise)));



//Creating target to send trap

        UserTarget uTarget= new UserTarget();
        ArrayList<String> destinationList = new ArrayList<String>(trapDetails.getDestinationIP());
        Iterator<String> itr= destinationList.iterator();
        String element;
        while(itr.hasNext()){
        uTarget = new UserTarget();
        element= itr.next().toString();
        uTarget.setAddress(new UdpAddress(InetAddress.getByName(element),trapDetails.getPort()));
        uTarget.setRetries(2);
        uTarget.setTimeout(5000);
        uTarget.setVersion(SnmpConstants.version3);
        uTarget.setSecurityLevel(trapDetails.getSecurityLevel());
        uTarget.setSecurityName(new OctetString(trapDetails.getUserName()));
        snmp.send(pdu, uTarget);

        }
EN

回答 1

Stack Overflow用户

发布于 2014-11-04 23:50:19

检查SecurityProtocols是否添加了PrivacyProtocols。如果不是,您可以添加如下

SecurityProtocols.getInstance().addPrivacyProtocol(new Priv3DES();

此外,要使用任何> 128位加密,请确保使用适当的JCE (如SunJCE )。参考http://docs.oracle.com/javase/7/docs/technotes/guides/security/SunProviders.html

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14433208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档