Java SNMP4J-无法使其针对具有SHA/AES 256的SNMP V3运行

Java SNMP4J-无法使其针对具有SHA/AES 256的SNMP V3运行,java,snmp,snmp4j,Java,Snmp,Snmp4j,我使用SNMP4J(版本2.5.3)在SNMP V3中配置的目标上启动SNMP查询。它适用于除隐私AES 256协议之外的所有auth/priv协议组合!我只能得到一个空响应 代码如下: public static void main(String[] args) throws Exception { String targetAddress = "udp:10.2.1.41/161"; String userName = "mip_aes256"; OID authPr

我使用SNMP4J(版本2.5.3)在SNMP V3中配置的目标上启动SNMP查询。它适用于除隐私AES 256协议之外的所有auth/priv协议组合!我只能得到一个空响应

代码如下:

public static void main(String[] args) throws Exception
{
    String targetAddress = "udp:10.2.1.41/161";
    String userName = "mip_aes256";
    OID authProtocol = AuthSHA.ID;
    String authPassphrase = "mip_user_AuthPassword";
    OID privProtocol = PrivAES256.ID;
    String privPassphrase = "mip_user_PrivPassword";

    // build a PDU with all the OIDs
    ScopedPDU requestPDU = new ScopedPDU();
    requestPDU.add(new VariableBinding(new OID("1.3.6.1.2.1.1.1.0")));
    requestPDU.setType(PDU.GET);

    UserTarget target = new UserTarget();
    target.setTimeout(5000);
    target.setVersion(SnmpConstants.version3);
    target.setAddress(GenericAddress.parse(targetAddress));
    target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
    target.setSecurityName(new OctetString(userName));

    TransportMapping<UdpAddress> transport = new DefaultUdpTransportMapping();
    Snmp snmp = new Snmp(transport);
    USM usm = new USM(SecurityProtocols.getInstance(), new OctetString(MPv3.createLocalEngineID()), 0);
    SecurityModels.getInstance().addSecurityModel(usm);

    // add user to the USM
    snmp.getUSM().addUser(new OctetString(userName),
            new UsmUser(new OctetString(userName),
                    authProtocol,
                    new OctetString(authPassphrase),
                    privProtocol,
                    new OctetString(privPassphrase)));

    transport.listen();

    ResponseEvent re = snmp.send(requestPDU, target);
    PDU responsePDU = re.getResponse();
    if (responsePDU == null)
    {
        System.out.println("responsePDU == null :");
        System.out.println("> Error     : " + re.getError());
        System.out.println("> Address     : " + re.getPeerAddress());
        System.out.println("> Source      : " + re.getSource());
        System.out.println("> User object : " + re.getUserObject());
    }
    else if (responsePDU.getVariableBindings() != null)
    {
        for (VariableBinding vb : responsePDU.getVariableBindings())
        {
            System.out.println(vb.getOid() + " --> " + vb.getVariable());
        }
    }
}
publicstaticvoidmain(字符串[]args)引发异常
{
字符串targetAddress=“udp:10.2.1.41/161”;
字符串userName=“mip_aes256”;
OID authProtocol=AuthSHA.ID;
字符串authPassphrase=“mip\u user\u AuthPassword”;
OID PrivasProtocol=PrivAES256.ID;
字符串privPassphrase=“mip\u user\u PrivPassword”;
//使用所有OID构建PDU
ScopedPDU requestPDU=新的ScopedPDU();
请求PDU.add(新变量绑定(新OID(“1.3.6.1.2.1.1.0”));
requestPDU.setType(PDU.GET);
UserTarget=newusertarget();
target.setTimeout(5000);
setVersion(SnmpConstants.version3);
setAddress(GenericAddress.parse(targetAddress));
target.setSecurityLevel(SecurityLevel.AUTH_PRIV);
setSecurityName(新的八位字符串(用户名));
TransportMapping transport=新的defaultUDPTTransportMapping();
Snmp=新的Snmp(传输);
USM USM=新的USM(SecurityProtocols.getInstance(),新的八位字符串(MPv3.createLocalEngineID()),0);
SecurityModels.getInstance().addSecurityModel(usm);
//将用户添加到USM
snmp.getUSM().addUser(新的八位字符串(用户名),
新的UsmUser(新的八位字符串(用户名),
授权协议,
新的八进制字符串(authPassphrase),
隐私协议,
新的八进制字符串(privapsphrase));
运输。听();
ResponseEvent re=snmp.send(请求PDU,目标);
PDU responsePDU=re.getResponse();
if(responsePDU==null)
{
System.out.println(“responsePDU==null:”;
System.out.println(“>错误:+re.getError());
System.out.println(“>地址:+re.getPeerAddress());
System.out.println(“>Source:+re.getSource());
System.out.println(“>用户对象:”+re.getUserObject());
}
else if(responsePDU.getVariableBindings()!=null)
{
for(VariableBinding vb:responsePDU.getVariableBindings())
{
System.out.println(vb.getOid()+“-->”+vb.getVariable());
}
}
}
我很确定路由器配置是好的(思科路由器上的网络提供商配置)。我的Java8安装(在Ubuntu64上)包括Java加密扩展,强度无限。 你对这个问题有什么想法吗

谢谢你的帮助

致意
Sylvain

SNMPv3 AES 256是非标准的。谷歌的snmpv3 aes 256将详细介绍这一点。 根据我们的经验,并非所有的实现都可以互操作。
这就是标准化的目的。

SNMPv3 AES 256是非标准的。谷歌的snmpv3 aes 256将详细介绍这一点。 根据我们的经验,并非所有的实现都可以互操作。
这就是标准化的目的。

我发现了一个变化,使其适用于Cisco 2900

OID privProtocol = PrivAES256With3DESKeyExtension.ID;
SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES256With3DESKeyExtension());

我希望这能帮助别人

我发现了一个变化,使它适用于Cisco 2900

OID privProtocol = PrivAES256With3DESKeyExtension.ID;
SecurityProtocols.getInstance().addPrivacyProtocol(new PrivAES256With3DESKeyExtension());

我希望这能帮助别人

谢谢你的回复。好的,我知道AES 256是非标准的,但如果SNMP4J支持它,这意味着什么?它只支持一些实现吗?哪一个?他们实施了一些措施。其他人(您的设备供应商)实现了其他功能。由于它是非标准的,它没有经过严格的过程来确保每个人都同意它是什么。因此,实现这样一个SNMP调用程序确实是一个挑战。我必须考虑每个设备的专用C?首先,我必须获得设备供应商的实现参数。如何找到这个??一家公司如何宣布对其产品的支持?谢谢你的回复。好的,我知道AES 256是非标准的,但如果SNMP4J支持它,这意味着什么?它只支持一些实现吗?哪一个?他们实施了一些措施。其他人(您的设备供应商)实现了其他功能。由于它是非标准的,它没有经过严格的过程来确保每个人都同意它是什么。因此,实现这样一个SNMP调用程序确实是一个挑战。我必须考虑每个设备的专用C?首先,我必须获得设备供应商的实现参数。如何找到这个??一家公司如何宣布对其产品的任何支持?