对于 Java 项目,我使用用户 IP 地址作为网站的唯一标识符。当用户只有 IPv4 地址时,一切正常。
但我的问题是,当用户拥有 IPv6 地址时,Java 将报告 IPv4 地址,而他们的浏览器将报告 IPv6 地址(在 PHP 中的 $_SERVER['REMOTE_ADDR'] 调用中)。
那么我如何让 Java 报告它的 IPv6 地址而不是 IPv4 ?
编辑:一些说明:
这仅用于允许一个人下载文件。如果几个人使用同一台电脑也没关系,并不重要。
假设用户访问 http://whatismyipaddress.com/使用 Chrome,它将显示 IPv6 地址。
但是如果我现在使用Java来获取http://whatismyipaddress.com/它将显示 IPv4 地址。这是为什么?我怎样才能让它显示 Chrome 中显示的 IPv6 地址?
编辑2:我使用的代码
public static String get(String url) throws WebFetchException {
String result = "";
try {
URL url1 = new URL(url);
HttpsURLConnection urlConn = (HttpsURLConnection) url1.openConnection();
urlConn.setConnectTimeout(8 * 1000);
urlConn.setRequestMethod("GET");
BufferedReader in = new BufferedReader(new InputStreamReader(urlConn.getInputStream()));
String text;
while ((text = in.readLine()) != null) {
result = result + text;
}
in.close();
}
} catch (Exception e) {
throw new WebFetchException("There was an exception while fetching the requested page: " + url);
}
return result;
}
最佳答案
IP 地址可以用作标识符的假设是错误的。越来越多的 ISP 正在部署某种形式的 NAT,因此许多用户将共享 IPv4 评估池。用户来自的地址可能会从一个连接更改为另一个连接,因此您不能依赖它的稳定性。
另一方面,更多的用户也获得了 IPv6,并且设备具有多个 IPv6 地址,这些地址会随着时间的推移而变化。
由于连接问题,用户也会在 IPv4 和 IPv6 之间切换。好吧,用户甚至不会注意到,他们的设备就会这样做。
因此依赖 IP 地址是行不通的。
关于java - 使 Java 报告 IPv6 地址而不是 IPv4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42094630/