告诉你jsp获取浏览者真实IP地址方法

我们知道在JSP里,获取网页客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实IP地址了。如果使用了反向代理软件,用request.getRemoteAddr()方法获取的IP地址是:127.0.0.1或192.168.1.110,而并不是客户端的真实IP。
经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的 IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR信息。用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。当我们访问index.jsp/时,其实并不是我们浏览器真正访问到了服务器上的index.jsp文件,而是先由代理服务器去访问index.jsp ,代理服务器再将访问到的结果返回给我们的浏览器,因为是代理服务器去访问index.jsp的,所以index.jsp中通过request.getRemoteAddr()的方法获取的IP实际上是代理服务器的地址,并不是客户端的IP地址。

步骤/方法

  • 01

    于是可得出获得客户端真实IP地址的方法一: public String getRemortIP(HttpServletRequest request) { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); }

  • 02

    获得客户端真实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(); } 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

(0)

相关推荐

  • Windows XP中获取未使用IP地址方法

    作为网管员,在我们解决Windows 操作系统的DHCP故障时,有时要找出某个地址范围内有哪些地址没有被使用。本人以前介绍过一种方法:打开命令提示窗口,在For…in…Do循环中调用ping命令。例如 ...

  • nginx做负载CDN加速获取端真实ip

    nginx做负载CDN加速获取端真实ip 在不用cdn的情况下,nginx做负载获取真实ip时,nginx配置如下: Java代码 proxy_set_header Host $host; proxy ...

  • Win7系统手动设置获取DNS与ip地址的方法

    用户在操作使用win7系统时,有时候连接网络过程提示自动获取DNS与ip地址,这样的结果是浏览器无法连接使用。为什么会出现这种情况呢?遇到这种情况我们应该怎么办呢?其实我们可以通过开始菜单进入网络中心 ...

  • Win7无法自动获取DNS与IP地址怎么办

    电脑在连接上网的时候会自动获取DNS与IP地址,保证浏览器能够正常连接浏览,但也有遇到意外的时候,有Win7用户就反映他的系统无法自动获取DNS与IP地址,无法自动只能改手动添加了,我们来看下具体的设 ...

  • Fast迅捷无线路由器始终获取不到IP地址怎么办?

    Fast迅捷无线路由器始终获取不到IP地址怎么办?

  • 如何解决水星路由WAN口获取不到IP地址

    Mercury水星是一款功能强大的路由器,那么你知道如何解决水星路由WAN口获取不到IP地址吗?下面是学习啦小编整理的一些关于如何解决水星路由WAN口获取不到IP地址的相关资料,供你参考. 解决水星路 ...

  • XP系统获取未使用IP地址的方法

    XP系统获取未使用IP地址的方法 解决方法: 打开记事本,在窗口中输入如下的命令: @Echooff date/t>IPList.txt time/t>>IPList.txt ech ...

  • 如果查看本机获取到的ip地址是多少?

    电脑ip地址对于我们上网是很重要的,如果获取不到ip就上不了网,还有一个就是获取到的ip是169.多少或者127.多少的是获取不到的意思,那么怎么查看电脑获取到的ip地址呢? 操作方法 01 现在大家 ...

  • 获取本机ip地址的方法

    获取本机ip地址的方法,介绍2种常用的 操作方法 01 方法一:cmd获取法. 1,win+r运行cmd: 2,输入ipconfig: 3,回车: 4,ipv4地址就是你的ip地址. 02 方法二:网 ...