我一直在查找IPv6地址的DNS查询问题,而我似乎无法找到有关的详细信息。
我正在尝试使用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"
指向{{1 }},以及指向192.168.0.190
的记录"ipv6.local.com"
。
DNS服务器在Android设备的Wi-Fi设置中明确设置,并在3ffe:b00:0:1:4678:3eff:fe36:16e8
上运行。
有什么想法吗?
答案 0 :(得分:1)
我不确定为什么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在后端运行C函数以完成工作。如您所知,C的getaddrinfo()函数支持IPv6,但gethostbyname()不支持。 您可能正在使用基础C函数运行Java的过时版本 gethostbyname()(不支持IPv6)。一世 会建议您升级将使用 getaddrinfo()的Java。