java - 使 Java 报告 IPv6 地址而不是 IPv4

标签 java php ipv6

对于 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/

相关文章:

java - 错误 : JAVA_HOME is set to an invalid directory: C:\Program Files\Java\jdk1. 8.0_102

java - Java 是否具有 Python 的 "string.ascii_uppercase"的等效项?

java - 如果我的员工没有重复完成,我该如何停止线程?

python - IPv6 正则表达式 python

c - 链路范围 IPv6 多播数据包突然无法在 MacBook Pro 上路由?

ipv6 - 从 MAC 转换为 IPv6

java - 使用 Java 8 5 天编译用 Java 编写的旧程序

php - 如何有效地修补运行在多台主机上的代码?

php - 如何修复 PHP 中的 'Creating default object from empty value' 警告

php - 使用 Arsort 排序不稳定