获取用户真实的IP
1、获取用户真实的IP
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
2、获得客户端真实IP地址的方法一
1 public String getRemortIP(HttpServletRequest request) { 2 if (request.getHeader("x-forwarded-for") == null) { 3 return request.getRemoteAddr(); 4 } 5 return request.getHeader("x-forwarded-for");
3、获得客户端真实IP地址的方法二
1 public String getIpAddr(HttpServletRequest request) { 2 String ip = request.getHeader("x-forwarded-for"); 3 if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 4 ip = request.getHeader("Proxy-Client-IP"); 5 } 6 if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 7 ip = request.getHeader("WL-Proxy-Client-IP"); 8 } 9 if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) { 10 ip = request.getRemoteAddr(); 11 } 12 return ip;
4、存在的问题
通过多级的方向代理,X-Forwarded-For的值会有多个,而是IP集合,究竟哪个才是真正的用户端的真实IP?
答:取X-Forwarded-For中第一个非unknown的有效IP字符串。
例如:X-Forwarded-For:192.168.1.1,192.168.1.2,192.168.1.3,192.168.1.4
用户真实IP为:192.168.1.1