`
guoyiqi
  • 浏览: 964717 次
社区版块
存档分类
最新评论

Java获取请求客户端的真实IP地址

    博客分类:
  • java
 
阅读更多

通常通过request.getRemoteAddr()

取得客户端的IP地址,做鉴权和校验,逻辑没问题,那么肯定request.getRemoteAddr()出了问题,google下,发现有人遇到类似的问题。

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

如果使用了反向代理软件,将http://192.168.1.110:2046/

的URL反向代理为http://www.xmsydw.com/

的URL时,用request.getRemoteAddr()
方法获取的IP地址是:127.0.0.1 或 192.168.1.110,而并不是客户端的真实IP。

经过代理以后,由于在客户端和服务之间增加了中间层,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给客户端。但是在转发请求的HTTP头信息中,增加了X-FORWARDED-FOR

信息用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

Java代码 复制代码 收藏代码
  1.    public String getIpAddr(HttpServletRequest request) {     
  2.       String ip = request.getHeader("x-forwarded-for");     
  3.       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {     
  4.          ip = request.getHeader("Proxy-Client-IP");     
  5.      }     
  6.       if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {     
  7.          ip = request.getHeader("WL-Proxy-Client-IP");     
  8.       }     
  9.      if(ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {     
  10.           ip = request.getRemoteAddr();     
  11.      }     
  12.      return ip;     
  13. }    
分享到:
评论

相关推荐

    Java获取客户端真实IP地址

    Java获取客户端真实IP地址

    java 获取客户端ip mac地址

    获取客户端ip地址( 这个必须从客户端传到后台): jsp页面下,很简单,request.getRemoteAddr() ; 因为系统的VIew层是用JSF来实现的,因此页面上没法直接获得类似request,在bean里做了个强制转换java 获取客户端ip ...

    Java正确获取客户端真实IP方法整理.docx

    在JSP里,获取客户端的IP地址的方法是:request.getRemoteAddr(),这种方法在大部分情况下都是有效的。但是在通过了Apache,Squid等反向代理软件就不能...用以跟踪原有的客户端IP地址和原来客户端请求的服务器地址。

    IP地址HTTP请求工具类

    获取本地IP地址,获取本地Host名称,获取Linux下的IP地址,获取用户真实IP地址,get/post请求 相应的工具类

    java中通过request获取IP以及MAC地址.java

    获取用户请求IP地址 根据IP地址获取mac地址

    Java获取客户端IP

    但是在通过了Apache,Squid等反向代理软件不能获取到客户端的真实IP地址了。  原因:由于在客户端和服务之间增加了中间代理,因此服务器无法直接拿到客户端的IP,服务器端应用也无法直接通过转发请求的地址返回给...

    Java中使用HttpRequest获取用户真实IP地址

    主要介绍了Java中使用HttpRequest获取用户真实IP地址,使用本文方法可以避免Apache、Squid、nginx等反向代理软件导致的非真实IP地址,需要的朋友可以参考下

    IpUtil工具类--通过request获取IP,通过IP获取地址

    IpUtil工具类--通过request获取IP,通过IP获取地址(需要联网,调用淘宝的IP库)。使用场景:在网站开发记录用户增删改查日志的时候,往往需要记录操作人的IP地址,来准确的生成操作日志记录等

    UserAgentUtils-1.20.jar 【用于通过从request请求中的User-Agent中获取客户端浏览器类型、客户端操作系统、ip地址等信息】

    UserAgentUtils-1.20.jar 【用于通过从request请求中的User-Agent中获取客户端浏览器类型、客户端操作系统、客户端ip地址等信息的jar插件】 ,非常好用,导入到项目的lib包中即可使用。 maven引用地址为: <!-- ...

    动态主机配置协议 DHCP 是 RFC 1541定义的标准协议,该协议允许服务器向客户端动态分配IP地址和配置信息

    动态主机配置协议 DHCP(Dynamic Host Configuration Protocol,动态主机配置协议) 是 RFC ...DHCP服务器:用于管理所有的IP网络信息,并处理客户端的DHCP请求,为接入的客户端分配IP地址、子网掩码、默认网关等内容。

    JAVA基于局域网的聊天室系统-包括客户端,服务端的(源代码+论文).zip

    A客户端向B客户端请求语音视频聊天是通过B客户端的用户名来获得B客户端的IP地址,并向B客户端发送语音视频聊天请求,当B客户端接受后捕获视频,并进行压缩传输到A客户端解压并进行显示,在B客户端接受视频的同时,A...

    java源码包---java 源码 大量 实例

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    Mockability-Clients-Java:用Java编写的可模拟性客户端

    response = clear(method, uri) 使用指定的method删除Mockability服务器记住的有关从IP地址到指定uri请求的所有内容。 如果响应不成功,则它的主体可能会引起关注。response = prepare(method, uri, ...

    JAVA程序员面试题

    getRemoteAddr():获取客户端的IP地址 getRemoteHost():获取客户端的名字 getSession([Boolean create]):返回和请求相关Session getServerName():获取服务器的名字 getServletPath():获取客户端所请求的脚本文件...

    JAVA上百实例源码以及开源项目

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    使用Java的网络编程实现一个简单的文件传输系统.txt

    当有客户端连接时,打印出客户端的IP地址,并创建一个Socket对象来与客户端进行通信。接下来使用BufferedInputStream和FileOutputStream对象来进行文件的读取和写入操作。在一个while循环中,不断从客户端读取数据并...

    Java 的Socket支持功能所做的服务器和客户端的实例 2011 05 30

    (2)以JFrame方式作了Socket客户端,用户可以输入IP地址以端口号9999(可以修改)和服务器通讯。用户使用textArea多行编辑器与服务器通讯。以单独的一行taxend(可以修改)结束通讯。也就是说在一个Socket实现多行...

    WEB15-request.rar

    案例二、完成登录错误信息的回显。 4.通过request获得请求行 获得客户端的请求方式:String getMethod() 获得请求的资源: ...request.getRemoteAddr() --- 获得访问的客户端IP地址 通过request获得请求头

    JAVA上百实例源码以及开源项目源代码

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 3...

    java源码包4

     Tcp服务端与客户端的JAVA实例源代码,一个简单的Java TCP服务器端程序,别外还有一个客户端的程序,两者互相配合可以开发出超多的网络程序,这是最基础的部分。 递归遍历矩阵 1个目标文件,简单! 多人聊天室 ...

Global site tag (gtag.js) - Google Analytics