55
产品文档
云服务器
基本操作
安全设置
文件系统设置
高防IP
设置转发规则
高防IP如何获取客户端真实IP地址


先说说这些请求头的意思

这是一个 Squid 开发的字段,只有在通过了HTTP代理或者负载均衡服务器时才会添加该项。

X-Real-IP

1、REMOTE_ADDR

2、HTTP_X_FORWARDED_FOR

3、

REMOTE_ADDR 是你的客户端跟你的服务器“握手”时候的IP。如果使用了“匿名代理”,REMOTE_ADDR将显示代理服务器的IP。


$_SERVER['HTTP_X_FORWARDED_FOR']; //用户是在哪个IP使用的代理(有可能存在,也可以伪造


一、没有使用代理服务器的情况:
HTTP_X_FORWARDED_FOR = 没数值或不显示

二、使用代理服务器的情况

REMOTE_ADDR = 最后一个代理服务器 IP

/**
 * 获取客户端ip
 */    
 function getClientIP() {
     $ip = "unknown";
     /*
      * 访问时用localhost访问的,读出来的是“::1”是正常情况。
      * ::1说明开启了ipv6支持,这是ipv6下的本地回环地址的表示。
      * 使用ip地址访问或者关闭ipv6支持都可以不显示这个。
      * */
    if (isset($_SERVER)) {
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } elseif (isset($_SERVER["HTTP_X_REAL_IP"])) {
            $ip = $_SERVER["HTTP_X_REAL_IP"];
        } elseif (isset($_SERVER["HTTP_CLIENT_ip"])) {
            $ip = $_SERVER["HTTP_CLIENT_ip"];
        } else {
            $ip = $_SERVER["REMOTE_ADDR"];
        }
    } else {
        if (getenv('HTTP_X_FORWARDED_FOR')) {
            $ip = getenv('HTTP_X_FORWARDED_FOR');
        } elseif (getenv('HTTP_X_REAL_IP')) {
            $ip = getenv('HTTP_X_REAL_IP');
        } elseif (getenv('HTTP_CLIENT_ip')) {
            $ip = getenv('HTTP_CLIENT_ip');
        } else {
            $ip = getenv('REMOTE_ADDR');
        }
    }
    if(trim($ip)=="::1"){
        $ip="127.0.0.1";
    }
    return $ip; 
}



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


下面是一个参考获取客户端IP地址的方法:

public String getClientIP(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; 
                                        }


域创云高防专家更专心、专注、专业!

高防云防御的开创者

注册获得礼包
专业资深工程师驻守
7X24小时极速响应
一站式无忧技术支持
免费备案服务

联系我们

广东茂名茂南区高凉中路6号1501

400-678-4567

联系我们

24小时售后 4006784567 24小时售后TEL:0668-2555666 售前咨询TEL:400-678-4567 投诉建议TEL:0668-2555999 信息安全TEL:0668-2555118 公司总机:0668-2555555 公司传真:0668-2555000
免费拨打 400-678-4567
免费拨打  400-678-4567 免费拨打 400-678-4567
微信公众号
返回顶部
返回顶部 返回顶部