java获取IP的方法
来源:互联网 发布:李莫愁爱杨过知乎 编辑:程序博客网 时间:2024/05/15 23:51
如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为http://www.xxx.com/ 的URL时,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。
Java代码
public String getIpAddr(HttpServletRequest request) {
String ip = request.getHeader("x-forwarded-for");
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getHeader("WL-Proxy-Client-IP");
}
if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
ip = request.getRemoteAddr();
}
return ip;
}
PS:可是,如果通过了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串ip值,究竟哪个才是真正的用户端的真实IP呢?
答案是取X-Forwarded-For中第一个非unknown的有效IP字符串。如:X-Forwarded-For:192.168.1.110, 192.168.1.120, 192.168.1.130, 192.168.1.100,用户真实IP为: 192.168.1.110
- java获取IP的方法
- java获取IP的方法
- java获取客户端IP的方法
- Java获取本机ip的方法
- java 获取IP地址的方法
- Java获取IP地址的多种方法
- [java]获取IP地址的常用方法
- java获取服务器ip的方法
- Java获取本地服务器Ip的方法
- 获取IP的方法
- 获取IP的方法
- java 获取客户端IP方法
- java中获取真实的客户端的IP的方法
- java中获取当前服务器的Ip地址的方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- Java获取客户端真实IP地址的两种方法
- delphi窗体设计
- 网络字节顺序问题(转载)
- java Applet从网页读取数据
- 亚马逊 编程题
- Android实现全屏方法
- java获取IP的方法
- 正则表达式实现资料验证的技术总结
- S3C2410的ADC驱动程序
- 字符编码
- 【转】武汉交管局微博
- android USB调试进行开发程序
- delphi程序设计.1
- <转载>Android 通过蓝牙控制小车源代码+视频
- poj字符串总结