`
伊然01
  • 浏览: 307020 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

获取当前访问客户端的真实IP地址(含内网地址)

阅读更多
在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110或公网IP,而并不是客户端的真实IP。

//获取客户端真实的IP
public String getIRealIPAddr(HttpServletRequest request) {  
String ip = request.getHeader("x-forwarded-for");
  if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip) || "null".equalsIgnoreCase(ip))    {  
    ip = request.getHeader("Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)   || "null".equalsIgnoreCase(ip)) { 
  ip = request.getHeader("WL-Proxy-Client-IP");
}
if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)    || "null".equalsIgnoreCase(ip)) {
  ip = request.getRemoteAddr();
}
return ip;
}
  
可是,如果通过了多级反向代理的话,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


jsp 中 request.getHeader() 相关详细 
 
System.out.println("Protocol: " + request.getProtocol());
System.out.println("Scheme: " + request.getScheme());
System.out.println("Server Name: " + request.getServerName() ); //获得服务器的名字
System.out.println("Server Port: " + request.getServerPort()); //获得服务器的端口号
System.out.println("rotocol: " + request.getProtocol());
System.out.println("Server Info: " + getServletConfig().getServletContext().getServerInfo());
System.out.println("Remote Addr: " + request.getRemoteAddr()); /获得客户端的ip地址
System.out.println("Remote Host: " + request.getRemoteHost()); //获得客户端电脑的名字,若失败,则返回客户端电脑的ip地址
System.out.println("Character Encoding: " + request.getCharacterEncoding());
System.out.println("Content Length: " + request.getContentLength());
System.out.println("Content Type: "+ request.getContentType());
System.out.println("Auth Type: " + request.getAuthType());
System.out.println("HTTP Method: " + request.getMethod()); //获得客户端向服务器端传送数据的方法有get、post、put等类型
System.out.println("ath Info: " + request.getPathInfo());
System.out.println("ath Trans: " + request.getPathTranslated());
System.out.println("Query String: " + request.getQueryString());
System.out.println("Remote User: " + request.getRemoteUser());
System.out.println("Session Id: " + request.getRequestedSessionId());
System.out.println("Request URI: " + request.getRequestURI());//获得发出请求字符串的客户端地址 

System.out.println("Servlet Path: " + request.getServletPath()); //获得客户端所请求的脚本文件的文件路径
System.out.println(request.getHeaderNames()); //返回所有request header的名字,结果集是一个enumeration(枚举)类的实例
System.out.println("Accept: " + request.getHeader("Accept"));
System.out.println("Host: " + request.getHeader("Host"));
System.out.println("Referer : " + request.getHeader("Referer"));
System.out.println("Accept-Language : " + request.getHeader("Accept-Language"));
System.out.println("Accept-Encoding : " + request.getHeader("Accept-Encoding"));
System.out.println("User-Agent : " + request.getHeader("User-Agent")); //返回客户端浏览器的版本号、类型
System.out.println("Connection : " + request.getHeader("Connection"));
System.out.println("Cookie : " + request.getHeader("Cookie"));
System.out.println("Created : " + session.getCreationTime());
System.out.println("LastAccessed : " + session.getLastAccessedTime());



分享到:
评论
1 楼 it_like 2013-08-26  
请问:
x-forwarded-for 是什么时候加入HTTP头中的,谁哪个应用加进去的,路由吗?

相关推荐

    Java获取客户端真实IP地址

    ### Java获取客户端真实IP地址详解 在Web开发中,获取客户端的真实IP地址是一个常见的需求,尤其是在需要进行地理位置定位、安全审计、流量统计等场景下。然而,在存在反向代理服务器的环境中,传统的`request....

    获取客户端真实IP(支持代理服务器)

    需要注意的是,在处理`X-Forwarded-For`字段时,我们应该优先考虑获取第一个非`unknown`的IP地址,以确保获取到的IP地址尽可能接近客户端的真实地址。同时,对于多级代理的情况,还需要考虑更复杂的逻辑处理,以应对...

    java IP地址工具类,java IP地址获取,java获取客户端IP地址

    2. **获取客户端IP地址**:在Web应用中,服务器需要区分每个客户端,`IpUtils`可能会有方法处理`HttpServletRequest`对象,从HTTP请求头(如`X-Forwarded-For`或`RemoteAddr`)中解析出真实客户端的IP地址。...

    java 获取客户端ip mac地址

    以上代码首先获取当前的`FacesContext`实例,然后从中得到`HttpServletRequest`对象,并调用其`getRemoteAddr()`方法获取客户端的IP地址。 需要注意的是,`getRemoteAddr()`方法返回的是客户端的IP地址,如果客户端...

    Java获取客户端真实IP地址过程解析

    Java获取客户端真实IP地址过程解析 ...Java获取客户端真实IP地址过程需要考虑多种情况,包括直接访问服务器端和通过多级代理访问服务器端,需要合理地使用HttpServletRequest对象和各种请求头来获取客户端真实IP地址。

    利用ASP获取客户端真实IP地址.doc

    【ASP获取客户端真实IP地址】 在互联网环境中,为了提供个性化的服务和防范恶意攻击,获取客户端的真实IP地址是一项基础且重要的任务。这篇文章主要探讨如何利用ASP(Active Server Pages)技术来实现这一目标。 *...

    获取访问者真实的IP地址

    ### 获取访问者真实的IP地址 在现代Web应用开发过程中,获取客户端的真实IP地址是一项非常重要的功能。这不仅可以帮助我们分析用户行为、优化服务,还能用于安全防护,例如防止恶意攻击等场景。本文将详细介绍如何...

    获取内网ip地址3种方法

    当你在Delphi或C++Builder等使用Indy的开发环境中,可以将TIdIPWatch控件添加到界面上,然后通过其属性或事件来获取当前设备的内网IP地址。例如,你可以监听TIdIPWatch.OnChange事件,当IP地址发生变化时,这个事件...

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

    但是,在使用反向代理软件的情况下,这种方法将无法获取到客户端的真实IP地址。因为反向代理软件会将客户端的请求转发到服务器端,而服务器端无法直接获取到客户端的IP地址。解决这个问题的方法是,使用`request....

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

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

    java获取客户端ip及mac地址

    1. **获取 IP 地址**:使用 `request.getRemoteAddr()` 可能会获取到代理服务器的 IP 地址,而通过检查 `X-Forwarded-For` 请求头可以更准确地获取客户端的真实 IP 地址。 2. **获取 MAC 地址**:虽然可以通过执行...

    .net获取客户端主机名和ip地址

    ### .NET 获取客户端主机名和IP地址 在.NET框架中,获取客户端的主机名和IP地址是一项常见的需求,尤其是在Web应用程序开发中。这通常用于跟踪用户活动、安全验证或者网络诊断等场景。本文将详细介绍几种在.NET环境...

    Java获取客户端IP及Mac地址(同网段).rar

    但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。所以...

    .net获取客户端IP,Mac地址

    在.NET开发环境中,获取客户端的IP地址和MAC地址是常见的需求,这主要涉及到网络通信和系统编程的相关知识。本文将详细讲解如何在.NET中实现这一功能,并提供相关的代码示例。 首先,我们要明白IP地址和MAC地址的...

    用Java来获取访问者真实的IP地址

    ### 使用Java获取访问者真实IP地址 在现代Web开发中,获取客户端的真实IP地址是非常重要的。这不仅有助于网站统计分析,还可以用于安全控制、地域限制等功能。然而,在使用如Apache、Squid等反向代理服务器的情况下...

    golang 获取客户端IP

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

    NAT123端口映射获取客户端访问用户真实IP

    在IT网络环境中,当内网用户通过代理服务器或者NAT(网络地址转换)进行外部访问时,原始的客户端IP地址通常会被转换成公网上的一个统一IP,这导致服务端无法获取到真实的用户IP,这对于需要识别用户来源或者进行...

    ASP如何获取真实IP地址

    在ASP(Active Server Pages)编程环境中,开发人员经常会遇到一个需求:需要准确地获取客户端的真实IP地址。然而,在实际应用中,由于许多用户可能通过代理服务器来访问网站,这就导致了传统的获取IP地址的方法不再...

    asp.net_web_获取客户端IP和MAC地址

    在ASP.NET Web应用程序中,获取客户端的IP地址和MAC地址是常见的需求,这通常涉及到网络编程和服务器端脚本处理。以下将详细讲解如何实现这一功能。 首先,客户端的IP地址可以通过HTTP请求头中的`REMOTE_ADDR`字段...

    web端不限制浏览器获取客户端MAC+IP地址

    web端项目通过浏览器访问的项目获取客户端mac地址及ip地址,进行登录权限校验; web端通过浏览器访问的项目增加权限; 本次项目由于对数据安全性要求较为严格,所以增加了用户在登录时对于客户端电脑的ip地址和mac...

Global site tag (gtag.js) - Google Analytics