java - SNMP4J - 无法使其运行 SHA/AES 256 的 SNMP V3

标签 java snmp snmp4j

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

这是代码:

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

我很确定路由器配置没问题(思科路由器上的网络提供商配置)。我的 Java 8 安装(在 Ubuntu 64 上)包括具有无限强度的 Java 加密扩展。 您对这个问题有什么想法吗?

感谢您的帮助,

最诚挚的问候 西尔万

最佳答案

我发现了一项更改,使其适用于 Cisco 2900。

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

我希望这可以帮助别人!

关于java - SNMP4J - 无法使其运行 SHA/AES 256 的 SNMP V3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41825332/

相关文章:

java - 如何编码和解码对象类型字段?

java - 使用 SNMP java 管理器监控 Windows 变量

java - 是否可以将匿名类从 Java 转换为 JRuby?

java - Groovy Web 服务客户端

java - 在超时时更改 deferredResult HTTP 状态代码

java - css 样式的十六进制字符串和 Color.decode

C# SNMP 陷阱接收器

snmp - snmpset 中的 NoAccess 错误

java - 接收器正确处理 snmp INFORM

java - Java 中人类可读格式的 SNMP EventTime