获取浏览器c 获取客户端ip真实的ip地址

如何获取用户的真实IP - 年轻就要对味
- 博客频道 - CSDN.NET
3202人阅读
问题引出:
&在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了 Apache,Nagix等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用 request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或 192.168.1.110,而并不是客户端的真实IP。
&&&&&&经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端 IP地址和原来客户端请求的服务器地址。
&&&&&&举例来说,当我们访问口碑网首页hangzhou.jsp时,其实并不是我们浏览器真正访问到了服务器上的hangzhou.jsp 文件,而是先由代理服务器Nagix去访问hagnzhou.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问hangzhou.jsp的,所以hangzhou.jsp中通过 request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
  &&&&&&if (request.getHeader(&x-forwarded-for&) == null) {
  &&&&&&&&&&&&return request.getRemoteAddr();
  &&&&&&}
  &&&&&&return request.getHeader(&x-forwarded-for&);
获得客户端真实IP地址的方法二
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();
  &&&&&&}
  &&&&&&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:6570162次
积分:1757
积分:1757
排名:第10814名
原创:46篇
转载:48篇
评论:31条
(5)(1)(1)(1)(1)(2)(1)(1)(3)(2)(1)(4)(2)(6)(1)(2)(1)(6)(6)(10)(10)(16)(11)(1)(1)web service 获取客户端浏览器的IP地址
[问题点数:80分,结帖人psy0324]
web service 获取客户端浏览器的IP地址
[问题点数:80分,结帖人psy0324]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
2005年7月 荣获微软MVP称号2008年7月 荣获微软MVP称号2007年7月 荣获微软MVP称号2006年7月 荣获微软MVP称号
2004年5月 .NET技术大版内专家分月排行榜第二2004年4月 .NET技术大版内专家分月排行榜第二
2010年 总版技术专家分年内排行榜第一2009年 总版技术专家分年内排行榜第一
2011年 总版技术专家分年内排行榜第二
本帖子已过去太久远了,不再提供回复功能。您的访问出错了(404错误)
很抱歉,您要访问的页面不存在。
1、请检查您输入的地址是否正确。
进行查找。
3、感谢您使用本站,两秒后自动跳转至网站首页在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,将http://192.168.1.110:2046/ 的URL反向代理为/ 的URL时,用request.getRemoteAddr() 方法获取的IP地址是:127.0.0.1 或 192.168.1.110 ,而并不是客户端的真实IP。经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问/index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr() 的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。于是可得出获得客户端真实IP地址的方法一:
public String getRemortIP(HttpServletRequest request) {
if (request.getHeader("x-forwarded-for") == null) {
return request.getRemoteAddr();
return request.getHeader("x-forwarded-for");
可是当我访问/index.jsp/ 时,返回的IP地址始终是unknown,也并不是如上所示的127.0.0.1 或 192.168.1.110 了,而我访问http://192.168.1.110:2046/index.jsp 时,则能返回客户端的真实IP地址,写了个方法去验证。原因出在了Squid上。squid.conf 的配制文件 forwarded_for 项默认是为on,如果 forwarded_for 设成了 off  则:X-Forwarded-For: unknown于是可得出获得客户端真实IP地址的方法二:
public String getRemoteHost(javax.servlet.http.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.equals("0:0:0:0:0:0:0:1")?"127.0.0.1":
阅读(...) 评论()

我要回帖

更多关于 java获取客户端ip 的文章

 

随机推荐