知识大全 Java获取客户端真实IP地址的两种方法

Posted 地址

篇首语:你不勇敢,没人替你坚强。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 Java获取客户端真实IP地址的两种方法相关的知识,希望对你有一定的参考价值。

Java获取客户端真实IP地址的两种方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

  在JSP里 获取客户端的IP地址的方法是 request getRemoteAddr() 这种方法在大部分情况下都是有效的 但是在通过了Apache Squid等反向代理软件就不能获取到客户端的真实IP地址了

  如果使用了反向代理软件 将 / 的URL反向代理为 / 的URL时 用request getRemoteAddr()方法获取的IP地址是  或  而并不是客户端的真实IP

  经过代理以后 由于在客户端和服务之间增加了中间层 因此服务器无法直接拿到客户端的IP 服务器端应用也无法直接通过转发请求的地址返回给客户端 但是在转发请求的HTTP头信息中 增加了X-FORWARDED-FOR信息 用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址 当我们访问/ 时 其实并不是我们浏览器真正访问到了服务器上的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 );

  

  可是当我访问/ 时 返回的IP地址始终是unknown 也并不是如上所示的  或  了 而我访问 时 则能返回客户端的真实IP地址 写了个方法去验证 原因出在了Squid上 nf 的配制文件 forwarded_for 项默认是为on 如果 forwarded_for 设成了 off  则 X Forwarded For unknown

  于是可得出获得客户端真实IP地址的方法二

  public String getIpAddr(HttpServletRequest request)

  String ip = request getHeader( x forwarded for );

  if(ip == null || ip length() == || unknown equalsIgnoreCase(ip))

  ip = request getHeader( Proxy Client IP );

  

  if(ip == null || ip length() == || unknown equalsIgnoreCase(ip))

  ip = request getHeader( WL Proxy Client IP );

  

  if(ip == null || ip length() == || unknown equalsIgnoreCase(ip))

  ip = request getRemoteAddr();

  

  return ip;

  

  可是 如果通过了多级反向代理的话 X Forwarded For的值并不止一个 而是一串Ip值 究竟哪个才是真正的用户端的真实IP呢?

  答案是取X Forwarded For中第一个非unknown的有效IP字符串

cha138/Article/program/Java/hx/201311/26104

相关参考

知识大全 JSF/JAVA根据IP获取客户端Mac地址

JSF/JAVA根据IP获取客户端Mac地址  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  需要

知识大全 java读取网站内容的两种方法

  HttpClient  利用apache的虚拟客户端包获取某个地址的内容 importjavaioUnsupportedEncodingException;  importjavauti

知识大全 获取用户真实IP地址代码

获取用户真实IP地址代码  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  获取用户真实IP地址代码

知识大全 ASP如何获取真实IP地址

ASP如何获取真实IP地址  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  在ASP中使用Requ

知识大全 asp获取用户真实IP地址的方法

asp获取用户真实IP地址的方法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  一般的程序都具备

知识大全 asp.net获取客户端IP地址网卡

asp.net获取客户端IP地址网卡  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! &n

知识大全 .net通过获取客户端IP地址反查出用户的计算机名

.net通过获取客户端IP地址反查出用户的计算机名  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 

知识大全 获取java线程中信息的两种方法[1]

   在进行多线程编程中比较重要也是比较困难的一个操作就是如何获取线程中的信息大多数人会采取比较常见的一种方法就是将线程中要返回的结果存储在一个字段中然后再提供一个获取方

知识大全 获取java线程中信息的两种方法[2]

   以上是一个多数熟悉单线程编程的人在第一反应下给出的实现方法但是该类在运行的时候输出的结果却不是期望的HelloWorld!而是Hello这是由于线程的竞争条件导致的

知识大全 获取java线程中信息的两种方法[3]

   二回调   轮询方法最大的特点是主类Main不断询问线程类是否结束这实际上大量浪费了运行时间特别是当线程特别多的时候因此如果反过来在线