`
Action-人生
  • 浏览: 99288 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

X-Forwarded-For 和 X-Real-IP 的区别?

    博客分类:
  • JAVA
阅读更多
        X-Forwarded-For 和 X-Real-IP 的区及获取客户端的ip?

一般来说,X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中

来自4.4.4.4的一个请求,header包含这样一行

X-Forwarded-For: 1.1.1.1, 2.2.2.2, 3.3.3.3
代表 请求由1.1.1.1发出,经过三层代理,第一层是2.2.2.2,第二层是3.3.3.3,而本次请求的来源IP4.4.4.4是第三层代理

而X-Real-IP,一般只记录真实发出请求的客户端IP,上面的例子,如果配置了X-Read-IP,将会是

X-Real-IP: 1.1.1.1
所以 ,如果只有一层代理,这两个头的值就是一样的


第一种
  /**
      * 从Request对象中获得客户端IP,处理了HTTP代理服务器和Nginx的反向代理截取了ip
      * @param request
      * @return ip
      */
    public static String getLocalIp(HttpServletRequest request) {
        String remoteAddr = request.getRemoteAddr();
        String forwarded = request.getHeader("X-Forwarded-For");
        String realIp = request.getHeader("X-Real-IP");

        String ip = null;
        if (realIp == null) {
            if (forwarded == null) {
                ip = remoteAddr;
            } else {
                ip = remoteAddr + "/" + forwarded.split(",")[0];
            }
        } else {
            if (realIp.equals(forwarded)) {
                ip = realIp;
            } else {
                if(forwarded != null){
                    forwarded = forwarded.split(",")[0];
                }
                ip = realIp + "/" + forwarded;
            }
        }
        return ip;
    }

第二种
public static String getIp(HttpServletRequest request) {
         String remoteAddr = request.getRemoteAddr();
          String forwarded = request.getHeader("X-Forwarded-For");
          String realIp = request.getHeader("X-Real-IP");
  
          String ip = null;
          if (realIp == null) {
              if (forwarded == null) {
                  ip = remoteAddr;
             } else {
                 ip = remoteAddr + "/" + forwarded;
             }
         } else {
             if (realIp.equals(forwarded)) {
                 ip = realIp;
             } else {
                 ip = realIp + "/" + forwarded.replaceAll(", " + realIp, "");
             }
         }
         return ip;
     }

第三种
   public static String getIp2(HttpServletRequest request) {
             String ip = request.getHeader("X-Forwarded-For");
             if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
                 //多次反向代理后会有多个ip值,第一个ip才是真实ip
                 int index = ip.indexOf(",");
                 if(index != -1){
                     return ip.substring(0,index);
                 }else{
                     return ip;
                }
            }
            ip = request.getHeader("X-Real-IP");
            if(StringUtils.isNotEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)){
                return ip;
            }
            return request.getRemoteAddr();
       }
分享到:
评论

相关推荐

    gin-gonic-realip:Gin的Real IP中间件将http.Request的RemoteAddr设置为解析X-Forwarded-For标头或X-Real-IP标头的结果

    的Real IP中间件,将http.Request的RemoteAddr设置为解析X-Forwarded-For标头或X-Real-IP标头的结果。 用法 package main import ( "github.com/gin-gonic/gin" "github.com/thanhhh/gin-gonic-realip" ) func ...

    flex跨域上传

    proxy_set_header X-Forwarded-For $remote_addr; proxy_pass http://localhost:8080/zwh/; } } server { listen 80; server_name test1.zwh.com; location / { proxy_set_header Host $host; proxy_...

    获取用户Ip地址通用方法与常见安全隐患(HTTP_X_FORWARDED_FOR)

    复制代码 代码如下: function getIP() { if (isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { $realip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; } elseif (isset($_SERVER[‘HTTP_CLIENT_IP’])) { $realip = $_...

    7kbscan-WebPathBrute v1.6.0 最新编译版

    X-Forwarded-For是用于记录代理信息的,每经过一级代理X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中,来自4.4.4.4的一个请求,...

    nginx升级过程文档.docx

    因为系统需要websocket通信,但是服务器的nginx版本太低,无法解析websoket请求,需要升级。 升级后nginx主要配置为location / { ... #proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

    restrict-ip-koa-middleware

    自定义方式获取 IP 地址:取 IP 地址可用自定义方式,例如从 Header 里取 x-forwarded-for 或者 x-real-ip 字段等 自定义拦截后的处理方法:可自定义返回消息体,允许有特判逻辑放行特定的请求 基本用法 const Koa =...

    web站点获取用户IP的安全方法 HTTP_X_FORWARDED_FOR检验

    //设置默认值 if (isset($_SERVER[‘HTTP_X_FORWARDED_FOR’])) { $realip = $_SERVER[‘HTTP_X_FORWARDED_FOR’]; } elseif (isset($_SERVER[‘HTTP_CLIENT_IP’])) { $realip = $_SERVER[‘HTTP_CLIENT_IP’]...

    org.apache.commons.lang3.StringUtils.jar

    String ip = request.getHeader("X-Forwarded-For"); if (!StringUtils.isEmpty(ip) && !"unKnown".equalsIgnoreCase(ip)) { //多次反向代理后会有多个ip值,第一个ip才是真实ip int index...

    Nginx代理时header头中带”_”信息丢失问题的解决

    前言 开发网关项目时,在请求时往请求头header中放入... proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_set_header X-Nginx-Proxy true; add_header Pro

    nginx经过多层代理后获取真实来源ip过程详解

    问题 nginx取 $remote_addr 当做真实ip,而事实...real_ip_header X-Forwarded-For; real_ip_recursive on; 添加之后启动nginx报错: nginx: [emerg] unknown directive set_real_ip_from in /home/lnidmp/nginx/conf/

    F5XForwardedFor2008源码

    proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 2. https://www.163yun.com/help/do 3.asp.net context.Request.ServerVariables[...

    web路径探测工具 7kbscan-WebPathBrute 1.5.8 (集成三字典)

    1、X-Forwarded-For是用于记录代理信息的,每经过一级代理X-Forwarded-For是用于记录代理信息的,每经过一级代理(匿名代理除外),代理服务器都会把这次请求的来源IP追加在X-Forwarded-For中,来自4.4.4.4的一个请求...

    Nginx屏蔽F5心跳日志、指定IP访问日志

     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  proxy_pass http://mmt;  if ( $remote_addr != 192.168.0.2 ) {  access_log /var/log/nginx/nginx_access_abres.log;  } } 注:192.1

    remote_ip:一个插件,用于基于转发头重写Plug.Conn的remote_ip

    可以识别通用逗号分隔的标头,例如X-Forwarded-For , X-Real-Ip和X-Client-Ip ,以及 Forwarded标头。 您可以指定任意数量的转发头来识别甚至配置自己的解析器。 IP的处理是从后到先的,以防止IP欺骗。 默认情况下...

    autoindex:提供可搜索目录索引的轻量级Go Web服务器

    自动索引 轻量级go Web...i string 刷新间隔-l int 请求速率限制(每个IP请求/秒) -t duration 请求超时-forwarded bool 信任X-Real-IP和X-Forwarded-For标头-cached bool 提供缓存中的所有内容(而不是仅搜索/递归查

    PHP 获取客户端 IP 地址的方法实例代码

    $_SERVER[‘HTTP_X_FORWARDED_FOR’]:浏览当前页面的用户计算机的网关 $_SERVER[‘HTTP_X_REAL_IP’]:nginx 代理模式下,获取客户端真实IP /** * 获取客户端IP地址 */ function real_ip() { $ip = $_SERVER['...

    处理程序:用于Go HTTP服务和Web应用程序的有用中间件的集合

    用于填充r.RemoteAddr和r.URL.Scheme基础上, X-Forwarded-For , X-Real-IP , X-Forwarded-Proto和RFC7239 Forwarded运行位于HTTP反向代理围棋服务器时头。 用于在处理多个域(即多个CNAME别名)时重定向到首选...

    aedes-protocol-decoder:Aedes MQTT Broker的协议解码器

    该函数提取套接字详细信息,如果aedes-server-factory trustProxy选项设置为true,它将首先解析HTTP标头(x-real-ip | x-forwarded-for)和/或代理协议(v1和v2),然后将信息传递给aedes , aedes将它们分配给...

    harmonyos2-femock:femock,模拟

    harmonyos 2 FEMock - 数据接口模拟平台 安装 nodejs & npm nodejs >= 0.12.0 npm install ...X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_head

Global site tag (gtag.js) - Google Analytics