我一直遇到 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
上运行。
有什么想法吗?
最佳答案
我不确定为什么 IPv6 解析不适合您。这是我测试的Java代码示例(java版本“1.8.0_171”):
package com.myjava.ip;
import java.net.InetAddress;
import java.net.UnknownHostException;
class MyIpByHost {
public static void main(String a[]){
try {
InetAddress host = InetAddress.getByName("ipv6.google.com");
System.out.println(host.getHostAddress());
} catch (UnknownHostException ex) {
ex.printStackTrace();
}
}
}
输出:java com/myjava/ip/MyIpByHost => 2404:6800:4003:c02:0:0:0:8a
此代码返回端点“ipv6.google.com”的 IPv6。
Java run C functions in it's backend to get work done. As you already know getaddrinfo() function of C supports IPv6, but gethostbyname() does not. You may be running outdated version of java with underlying C function gethostbyname() which does not support IPv6. I would suggest you to upgrade Java which will use getaddrinfo().
关于java - InetAddress.getByName 失败 getaddrinfo 工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43925070/