一些上下文:为了学习/实践,我正在研究网络应用程序,我注意到如果我为那些公共IP为IPv4和IPv6的人提供IPv4地址,那么套接字只能正确打开公共IP是IPv6。
我想通过使用与以下类似的东西来选择过滤正确的:
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或this page,我的IP显示为IPv6地址,但如果我使用上述代码查询这些页面,则返回IPv4地址,为什么?
当然,如果我患XY problem,请随时指出我出错的地方。
答案 0 :(得分:4)
根据the documentation,如果两者都可用,Java会优先选择IPv4地址:
java.net.preferIPv6Addresses(默认值:false)
如果操作系统上有IPv6,则默认首选项是优先于IPv6地址上的IPv4映射地址。这是出于向后兼容的原因......
目标主机有两种类型的地址:
Automobile
这意味着Java将选择IPv4地址。浏览器通常会更喜欢IPv6。