上下文:我正在研究网络应用程序,并且我注意到只有在我向公共IP为IPv4的人提供IPv4地址并且向公共IP为IPv6的人提供IPv4地址时,套接字才能正确打开。
我想通过使用与以下内容类似的选项来选择合适的过滤器:
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());
}
}
如果我只是用谷歌搜索我的IP,请转到此页面或此页面,我的IP显示为IPv6地址,但是如果我使用上述代码查询这些页面,它将返回一个IPv4地址,为什么?
当然,如果我患有XY问题,请随时指出我出了问题的地方。
根据文档,如果两个地址均可用,则Java首选IPv4地址而不是IPv6地址:
java.net.preferIPv6Addresses(默认值:false)
如果操作系统上有IPv6可用,则默认首选项是优先使用IPv4映射的地址,而不是IPv6地址。这是出于向后兼容的原因...
目标主机具有两种地址:
wtfismyip.com. 3600 IN AAAA 2604:4300:a:2c::1:1
wtfismyip.com. 3600 IN A 69.30.217.90
这意味着Java将选择IPv4地址。浏览器通常会选择IPv6。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句