【问题标题】:IPv6 Availability in JavaJava 中的 IPv6 可用性
【发布时间】:2018-08-18 00:45:52
【问题描述】:

如果计算机网络能够处理 IPv6 连接,有没有办法检查 Java?我不是在问如何检查字节数组是 IPv4 地址还是 IPv6,或者 InetAddress 是其中一个,而是如何判断网络本身是否支持这样的连接。

【问题讨论】:

    标签: java networking ipv6


    【解决方案1】:

    以上功能版本只是第一个接口,没有全部迭代。 迭代它们:

    private static boolean supportsIPv6() throws SocketException {
        return Collections.list(NetworkInterface.getNetworkInterfaces()).stream()
                .map(NetworkInterface::getInterfaceAddresses)
                .flatMap(Collection::stream)
                .map(InterfaceAddress::getAddress)
                .anyMatch(((Predicate<InetAddress>) InetAddress::isLoopbackAddress).negate().and(address -> address instanceof Inet6Address));
    }
    

    【讨论】:

      【解决方案2】:

      是的;您可以只遍历接口并检查其中是否有任何不是环回的 IPv6 地址。

      final Enumeration<NetworkInterface> e = NetworkInterface.getNetworkInterfaces();
      while (e.hasMoreElements()) {
          final Iterator<InterfaceAddress> e2 = e.nextElement().getInterfaceAddresses().iterator();
          while (e2.hasNext()) {
              final InetAddress ip = e2.next().getAddress();
              if (ip.isLoopbackAddress() || ip instanceof Inet4Address){
                  continue;
              }
              return true;
          }
      }
      return false;
      

      【讨论】:

        【解决方案3】:

        如果你想以更实用的方式实现上述功能,你可以查看这个小助手方法。尽管使用了流、函数和 lambda,但它确实完成了上述操作。

        private static boolean supportsIPv6() throws SocketException {
            return Stream.of(NetworkInterface.getNetworkInterfaces().nextElement())
                         .map(NetworkInterface::getInterfaceAddresses)
                         .flatMap(Collection::stream)
                         .map(InterfaceAddress::getAddress)
                         .anyMatch(((Predicate<InetAddress>) InetAddress::isLoopbackAddress).negate().and(address -> address instanceof Inet6Address));
        
        }
        

        【讨论】:

          猜你喜欢
          • 2015-11-03
          • 1970-01-01
          • 2016-05-01
          • 1970-01-01
          • 2012-05-20
          • 2013-09-12
          • 2019-01-10
          • 2012-08-12
          • 2015-02-01
          相关资源
          最近更新 更多