gpt4 book ai didi

java - SNMPv3 Trap 发送问题

转载 作者:行者123 更新时间:2023-12-01 04:54:13 24 4
gpt4 key购买 nike

使用 SNMP4J 创建的陷阱发送方中的 privProtocol 3DES、AES192AES256 V3 陷阱发送失败。发生异常情况如下:

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。

代码如下:

    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())));
}

......

//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);

}

最佳答案

检查SecurityProtocols是否添加了PrivacyProtocols。如果没有,您可以添加类似

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

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

关于java - SNMPv3 Trap 发送问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14433208/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com