使Java报告一个IPv6地址而不是IPv4地址

使Java报告一个IPv6地址而不是IPv4地址,java,php,ipv6,Java,Php,Ipv6,对于Java项目,我使用用户ip地址作为网站的唯一标识符。当用户只有IPv4地址时,这一切都可以正常工作 但我的问题是,当用户拥有IPv6地址时,Java将报告IPv4地址,而他们的浏览器将报告IPv6地址(在PHP中的$\u SERVER['REMOTE\u ADDR']调用中) 那么,如何让Java报告它是IPv6地址而不是IPv4地址呢 编辑:一些澄清: 这只允许一个人下载一个文件。如果几个人使用同一台电脑,这并不重要 假设用户使用chrome进入,它将显示一个IPv6地址 但如果我现在使

对于Java项目,我使用用户ip地址作为网站的唯一标识符。当用户只有IPv4地址时,这一切都可以正常工作

但我的问题是,当用户拥有IPv6地址时,Java将报告IPv4地址,而他们的浏览器将报告IPv6地址(在PHP中的$\u SERVER['REMOTE\u ADDR']调用中)

那么,如何让Java报告它是IPv6地址而不是IPv4地址呢

编辑:一些澄清:

这只允许一个人下载一个文件。如果几个人使用同一台电脑,这并不重要

假设用户使用chrome进入,它将显示一个IPv6地址

但如果我现在使用Java来获取,它将显示一个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地址是行不通的。

首先,ip地址不是(完全)唯一的标识符。为什么不存储IP呢?不管它是ipv4还是ipv6?“Java将报告IPv4地址”是什么意思?您的方案不适用于同一台机器上的多个用户。如何获取ip数据,是否使用特定类型?你有密码吗?