使Java报告一个IPv6地址而不是IPv4地址
对于Java项目,我使用用户ip地址作为网站的唯一标识符。当用户只有IPv4地址时,这一切都可以正常工作 但我的问题是,当用户拥有IPv6地址时,Java将报告IPv4地址,而他们的浏览器将报告IPv6地址(在PHP中的$\u SERVER['REMOTE\u ADDR']调用中) 那么,如何让Java报告它是IPv6地址而不是IPv4地址呢 编辑:一些澄清: 这只允许一个人下载一个文件。如果几个人使用同一台电脑,这并不重要 假设用户使用chrome进入,它将显示一个IPv6地址 但如果我现在使用Java来获取,它将显示一个IPv4地址。这是为什么?我如何让它显示Chrome中显示的IPv6地址 编辑2:我使用的代码使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地址 但如果我现在使
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数据,是否使用特定类型?你有密码吗?