浏览器显示 IPv6,但查询 returns IPv4——为什么?
Browser shows IPv6, yet query returns IPv4 -- why?
一些背景信息:对于 study/practice,我正在开发一个网络应用程序,我注意到如果我向 public IP 为public IP 为 IPv6 的用户的 IPv4 和 IPv6。
我想 select 使用与以下类似的东西来过滤正确的:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
public class Test {
public static void main(String[] args) throws MalformedURLException, IOException {
BufferedReader ipTypeChecker = new BufferedReader(
new InputStreamReader(
new URL("https://wtfismyip.com/text").openStream()
)
);
System.out.println(ipTypeChecker.readLine());
}
}
如果我只是 google 我的 ip 是什么,转到 this page or this page,我的 IP 显示为 IPv6 地址,但是如果我使用上面的代码查询这些页面 returns 一个 IPv4 地址,为什么?
当然,如果我遇到 XY problem 问题,请随时指出我哪里出错了。
根据 the documentation Java 首选 IPv4 地址而不是 IPv6 地址(如果两者都可用):
java.net.preferIPv6Addresses (default: false)
If IPv6 is available on the operating system the default preference is to prefer an IPv4-mapped address over an IPv6 address. This is for backward compatibility reasons...
目标主机有两种类型的地址:
wtfismyip.com. 3600 IN AAAA 2604:4300:a:2c::1:1
wtfismyip.com. 3600 IN A 69.30.217.90
这意味着 Java 将选择 IPv4 地址。浏览器通常更喜欢 IPv6。
一些背景信息:对于 study/practice,我正在开发一个网络应用程序,我注意到如果我向 public IP 为public IP 为 IPv6 的用户的 IPv4 和 IPv6。
我想 select 使用与以下类似的东西来过滤正确的:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
import java.net.URL;
import java.net.MalformedURLException;
public class Test {
public static void main(String[] args) throws MalformedURLException, IOException {
BufferedReader ipTypeChecker = new BufferedReader(
new InputStreamReader(
new URL("https://wtfismyip.com/text").openStream()
)
);
System.out.println(ipTypeChecker.readLine());
}
}
如果我只是 google 我的 ip 是什么,转到 this page or this page,我的 IP 显示为 IPv6 地址,但是如果我使用上面的代码查询这些页面 returns 一个 IPv4 地址,为什么?
当然,如果我遇到 XY problem 问题,请随时指出我哪里出错了。
根据 the documentation Java 首选 IPv4 地址而不是 IPv6 地址(如果两者都可用):
java.net.preferIPv6Addresses (default: false)
If IPv6 is available on the operating system the default preference is to prefer an IPv4-mapped address over an IPv6 address. This is for backward compatibility reasons...
目标主机有两种类型的地址:
wtfismyip.com. 3600 IN AAAA 2604:4300:a:2c::1:1
wtfismyip.com. 3600 IN A 69.30.217.90
这意味着 Java 将选择 IPv4 地址。浏览器通常更喜欢 IPv6。