【问题标题】:Inet6Address.getByName() does return (existing) IPv6 but only IPv4 address?Inet6Address.getByName() 确实返回(现有)IPv6 但只返回 IPv4 地址?
【发布时间】:2014-01-09 15:49:42
【问题描述】:

以下总是打印第一个返回的 IPv4 地址而不是第一个 IPv6 地址 虽然我明确使用了 Inet6Adress 而不是 InetAddress。这是我使用的 OpenJDK 1.7.0 的错误吗?

InetAddress ipv6 = Inet6Address.getByName("www.google.com");

我应该如何为给定的主机名获取一个 IPv6 地址(如果不存在,则为 NULL)?

我不想在 IPv4 和 IPv6 之间更改解析器首选项,在这种情况下,我真的想看看是否至少存在一个 IPv6 地址。

通过迭代 InetAddress.getAllByName() 的所有结果并检查任何“instanceof Inet6Address”可能是可行的,但这看起来不像假定的方式。

【问题讨论】:

标签: java ipv6


【解决方案1】:

刚刚找到这个answer

我正在复制用户 Pr0gr4mm3r 的答案

java.net.Inet6Address 不会覆盖 getByName()
所以它总是会返回特定的 IPv4 地址, 除非您的参数本身采用有效 IPv6 地址的形式,否则在这种情况下,此方法将返回 Inet6Address-Object。

例如:
getByName("stackoverflow.com") --> Inet4Address
getByName("2001:0db8:85a3:08d3:1319:8a2e:0370:7344") --> Inet6Address

【讨论】:

猜你喜欢
  • 2011-11-17
  • 2013-08-24
  • 2014-05-29
  • 2016-09-20
  • 2017-07-03
  • 1970-01-01
  • 2011-02-25
  • 2012-01-03
  • 1970-01-01
相关资源
最近更新 更多