【发布时间】:2017-06-24 23:30:21
【问题描述】:
对于 Java 项目,我使用用户 IP 地址作为网站的唯一标识符。当用户只有 IPv4 地址时,一切正常。
但这是我的问题,当用户拥有 IPv6 地址时,Java 将报告 IPv4 地址,而他们的浏览器将报告 IPv6 地址(在 PHP 中的 $_SERVER['REMOTE_ADDR'] 调用中)。
那么我如何让 Java 报告它是 IPv4 的 IPv6 地址?
编辑:一些澄清:
这仅用于允许一个人下载文件。几个人使用同一台电脑没关系,不是很重要。
假设用户使用 chrome 访问http://whatismyipaddress.com/,它将显示 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 地址不是(完全)唯一的标识符。为什么不只存储 IP - 无论是 ipv4 还是 ipv6? “Java 将报告 IPv4 地址”是什么意思?
-
您的方案不适用于同一台机器上的多个用户。
-
如何获取ip数据,是否使用特定类型?有代码吗?