【发布时间】:2017-05-11 20:35:40
【问题描述】:
我在使用 DNS 查找 IPv6 地址时遇到问题,我似乎无法找到有关该地址的好信息。
我正在尝试使用 InetAddress.getByName("ipv6.local.com") 查找 IPv6 地址。它会引发 UnknownHostException 错误。
奇怪的是我知道可以联系 DNS 服务器,因为这样可以:
InetAddress.getByName("ipv4.local.com")
我也知道 IPv6 记录正在工作,因为我可以运行:
nslookup ipv6.local.com
它会正确返回3ffe:b00:0:1:4678:3eff:fe36:16e8。
同样,如果我在 C++ 中运行以下命令,我也会得到带有上述地址的结果:
int errorCode = getaddrinfo("ipv6.local.com", "4242", &hints, &res);
我也试过Inet6Address.getByName(),但这也会抛出UnknownHostException。那么为什么getaddrinfo() 和nslookup 工作而不是InetAddress.getByName()?
我正在尝试从与 DNS 服务器在同一网络上运行 Android 6.0.1 的 Android 设备 (Galaxy Tab S2 8") 进行 DNS 查找。DNS 服务器有一条记录 "ipv4.local.com" 指向 192.168.0.190,并且一条记录 "ipv6.local.com" 指向 3ffe:b00:0:1:4678:3eff:fe36:16e8。
DNS 服务器在 Android 设备的 Wi-Fi 设置中明确设置,并在 192.168.0.182 上运行。
有什么想法吗?
【问题讨论】:
-
InetAddress.getAllByName()是否为您返回任何 IPv6 地址? -
谢谢雷米。不幸的是,getAllByName 会为 ipv6.local.com 抛出相同的 UnknownHostException 并且适用于 ipv4.local.com。
-
您从哪里获得
3ffe:b00:0:1:4678:3eff:fe36:16e8地址?那是一个全局地址,除非它是由您的 ISP 或 RIR 分配给您的,否则您不应使用全局地址。我并不是说这是您的问题,但如果没有正确分配给您,将来可能会导致您出现问题。
标签: java android c++ networking ipv6