原文链接:
https://blog.youkuaiyun.com/u013126379/article/details/53324753
今天使用request.getRemoteAddr()获取IP时,得到了0:0:0:0:0:0:0:1,最后通过查询发现是C:\Windows\System32\drivers\etc\hosts这个文件中的配置问题。
hosts文件中默认有:
# 127.0.0.1 localhost# 0:0:0:0:0:0:0:1 localhost
只需要把# 0:0:0:0:0:0:0:1 localhost 注释或者删除就行
如果项目部署在本机win7系统,访问时是通过 localhost 来访问,
用java获取ip地址可能会出现该问题,这时获取的ip将是 0:0:0:0:0:0:0:1
要是机器在局域网中,访问时使用自己的ip访问,如 我的ip是 :10.0.1.234
访问url:http://10.0.1.234:8080/demo
这时候请求会经过路由器转发,所以服务器获取的就是本机的局域网内ip,在java中获取的ip就是 10.0.1.234
public static String getIP(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if (!checkIP(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if (!checkIP(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if (!checkIP(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
private static boolean checkIP(String ip) {
if (ip == null || ip.length() == 0 || "unkown".equalsIgnoreCase(ip)
|| ip.split(".").length != 4) {
return false;
}
return true;
}
本文详细解释了在使用Java的request.getRemoteAddr()方法获取IP地址时,遇到返回值为0:0:0:0:0:0:0:1的情况,以及如何通过修改hosts文件解决此问题。介绍了0:0:0:0:0:0:0:1作为IPv6本地回环地址的含义,并提供了代码示例来正确获取IP。
1858

被折叠的 条评论
为什么被折叠?



