`
zengshaotao
  • 浏览: 792944 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

获得客户端IP

 
阅读更多

在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr() ,这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。
如果使用了反向代理软件,将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地址和原来客户端请求的服务器地址。当我们访问http://www.xxx.com/index.jsp/ 时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问http://192.168.1.110:2046/index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr() 的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。
于是可得出获得客户端真实IP地址的方法一:

1
2
3
4
5
6
public String getRemortIP(HttpServletRequest request) {
  if (request.getHeader("x-forwarded-for") == null) {
   return request.getRemoteAddr();
  }
  return request.getHeader("x-forwarded-for");
}

  

可是当我访问http://www.xxx.com/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地址的方法二:

1
2
3
4
5
6
7
8
9
10
11
12
13
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":ip;
}

 

原文地址:http://www.cnblogs.com/icerainsoft/p/3584532.html

分享到:
评论

相关推荐

    golang 获取客户端IP

    集成各种获取方式,获取正确的IP

    java 获取客户端ip mac地址

    如果需要获取真实的客户端IP地址,还需要检查HTTP头部信息中的`X-Forwarded-For`字段。 #### 二、获取客户端 MAC 地址 获取客户端的MAC地址相对较为复杂,一般不推荐直接在Web应用中实现该功能。但在某些特定场景...

    ASPdotnet获得客户端的IP

    在ASP.NET开发中,获取客户端IP地址是一项常见的需求,这对于实现如访问统计、地理位置定位、安全防护等功能至关重要。本文将详细讲解如何在ASP.NET中获取客户端的IP地址,并结合提供的资源进行讨论。 首先,我们...

    webService调取IP所在地,以及获得客户端真实IP

    webService调取IP所在地,以及获得客户端真实IP

    java非常强的获取客户端真实IP的两种方法

    当请求经过反向代理时,这个字段会包含原始客户端IP地址的信息。以下是一个简单的示例代码: ```java public String getRealIP(HttpServletRequest request) { String ip = request.getHeader("x-forwarded-for");...

    获得IE客户端IP的类

    获得客户端IP的类,可以通过该类里的方法获取连接上来的IE客户端的IP

    Action检查客户端IP

    javaAction中用于获得访问客户端的IP

    C#程序设计-3期(KC008) KC008110200019_如何在ASP.NET中获得客户端IP地址.docx

    首先,客户端IP地址是指互联网上的设备(如用户的电脑、手机等)在网络通信中使用的唯一标识符。在ASP.NET中,我们可以利用`HttpRequest`对象的`UserHostAddress`属性来获取这一信息。`HttpRequest`对象是ASP.NET...

    JSP获取客户端IP地址浏览器版本操作系统.pdf

    获取客户端IP地址、浏览器版本和操作系统信息在JSP中的实现方法 在JSP中,获取客户端的IP地址、浏览器版本和操作系统信息是非常重要的。通过使用HttpServletRequest对象,我们可以获取到客户端的相关信息。 获取...

    JS获取客户端IP地址、MAC和主机名的7个方法汇总

    ### JS获取客户端IP地址、MAC和主机名的7个方法详解 #### 一、使用JS获取客户端IP的方法 ##### 方法一:使用ActiveX获取IP(仅适用于IE浏览器) 这种方法依赖于`ActiveXObject`来实现,因此只能在允许运行ActiveX...

    jsp页面得到客户端的真是ip

    ### JSP 页面获取客户端真实 IP 的方法 在 IT 领域中,了解客户端的真实 IP 地址对于网站统计、安全防护以及个性化推荐等方面都非常重要。由于互联网中的 HTTP 请求经常通过代理服务器转发,因此直接使用 `request....

    fw.qq.com/ipaddress已失效 javascript获得客户端IP的新方法

    我们调用它的写法是[removed][removed]。它能够返回用户IP和地址,例如:var... javascript获得客户端IP的又一方法 近日,我发现了另一个可以获得客户端IP的方法,这个服务是国外一网站提供的。使用方法如下: [Ctrl+

    asp.net获取客户端IP-用户名等信息

    2. **HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]**:这种方法同样可以从服务器变量中获取客户端IP,但与UserHostAddress不同的是,如果请求通过代理,它通常会返回代理服务器的IP。 3. **X-...

    nginx配置文件-安装客户端ip进行转发

    总的来说,Nginx的配置文件允许我们灵活地管理网络流量,通过`proxy_pass`指令和相关的头信息设置,我们可以确保客户端IP信息在转发过程中得到保留。这在需要追踪用户行为、实施安全策略或者进行负载均衡时尤其有用...

    获取客户端IP

    在很多应用下都可能有需要将用户的真实IP记录下来,这时就要获得用户的真实IP地址,在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等...

    java获取客户端IP及IP归属地

    在Java编程中,获取客户端IP地址以及其归属地是一项常见的需求,这主要涉及到网络协议的理解以及第三方库的使用。在Web应用中,服务器通常需要识别来访用户的地理位置信息,以便进行个性化服务、安全控制或者数据...

    获取客户端IP以及获取IP所属地都有

    总结,获取客户端IP地址可以通过分析HTTP请求头得到,而获取IP归属地则需要借助于IP地理位置服务,如“聚合数据”。通过向其API发送请求并解析返回的JSON数据,可以得到详细的地理位置信息。在实际开发中,务必遵循...

    C#获得客户端MAC ip

    根据提供的文件信息,本文将详细解释如何在C#中获取客户端的MAC地址(Media Access Control Address)以及IP地址。此过程通常涉及到网络编程,并且由于安全性和隐私问题,在实际应用时需要格外小心。 ### 一、理解...

    获取服务端硬件信息和客户端IP,MAC,浏览器信息

    客户端IP地址是网络中设备的唯一标识,通常通过网络请求头中的`REMOTE_ADDR`字段获取。在某些情况下,如果客户端经过了代理,可能需要检查`X-Forwarded-For`字段,因为这是代理服务器通常会设置的IP地址。 MAC地址...

    获取客户的ip小例子

    这时,我们可以从Socket对象获取远程地址来得到客户端IP。 ```java import java.net.Socket; public class CustomServer { public void handleRequest(Socket socket) { String clientIP = socket....

Global site tag (gtag.js) - Google Analytics