【发布时间】:2015-09-12 03:04:19
【问题描述】:
一点上下文:为了学习/练习,我正在开发一个网络应用程序,我注意到只有当我向公共 IP 为 IPv4 的人提供 IPv4 地址时,套接字才会正确打开,而对于那些公共 IP 为 IPv6 的人,套接字才会正确打开是 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 的问题,请随时指出我哪里出错了。
【问题讨论】:
-
不要试图猜测网络架构。许多系统同时具有 IPv4 和 IPv6,或者位于 NAT64 网关之后,或者......等等......让您的应用程序在任何环境中都表现良好。
标签: java sockets networking ipv6 ipv4