zoukankan      html  css  js  c++  java
  • PHP获取IP,HTTP代理问题

    首先了解一些HTTP代理的相关知识.
    使用不同种类代理服务器,情况会有所不同:
    一、没有使用代理服务器的情况:
    REMOTE_ADDR = 您的 IP
    HTTP_VIA = 没数值或不显示
    HTTP_X_FORWARDED_FOR = 没数值或不显示
    二、Transparent Proxies,使用透明代理服务器的情况:
    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 代理服务器 IP
    HTTP_X_FORWARDED_FOR = 您的真实 IP
    这类代理服务器还是将您的信息转发给您的访问对象,无法达到隐藏真实身份的目的。
    三、Anonymous Proxies,使用普通匿名代理服务器的情况:
    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 代理服务器 IP
    HTTP_X_FORWARDED_FOR = 代理服务器 IP
    隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。
    四、Distorting Proxies,使用欺骗性代理服务器的情况:
    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 代理服务器 IP
    HTTP_X_FORWARDED_FOR = 随机的 IP
    告诉了访问对象您使用了代理服务器,但编造了一个虚假的随机IP代替您的真实IP欺骗它。
    五、使用高匿名代理服务器的情况:High Anonymity Proxies (Elite proxies)
    REMOTE_ADDR = 代理服务器 IP
    HTTP_VIA = 没数值或不显示
    HTTP_X_FORWARDED_FOR = 没数值或不显示

    <?php
    /**
      * get the real IP
      *
      * @Author:
      * @Return: string
      */
    function getIP()
    {
        static $realip;
        if (isset($_SERVER)){
            if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
                $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
            } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
                $realip = $_SERVER["HTTP_CLIENT_IP"];
            } else {
                $realip = $_SERVER["REMOTE_ADDR"];
            }
        } else {
            if (getenv("HTTP_X_FORWARDED_FOR")){
                $realip = getenv("HTTP_X_FORWARDED_FOR");
            } else if (getenv("HTTP_CLIENT_IP")) {
                $realip = getenv("HTTP_CLIENT_IP");
            } else {
                $realip = getenv("REMOTE_ADDR");
            }
        }
    
        return $realip;
    }
    ?>

    在PHP中我们可以用$_SERVER["REMOTE_ADDR"]来获取用户客户端的IP地址,但如果客户端是使用代理服务器,
    那取到的就是代理服务器的 IP 地址.
    要想透过代理服务器取得客户端的真实 IP 地址,就要使用$_SERVER["HTTP_X_FORWARDED_FOR"] 来读取.
    但并不是用$_SERVER["HTTP_X_FORWARDED_FOR"]都能来读取到透过代理服务器的客户真实 IP,有些用此方法读取到的仍然是代理服务器的 IP.
    建议不要使用HTTP_X_FORWARDED_FOR,这会提供机会让访问者伪造ip,而变得难易查询.

    references:

    http://czy4411741.blog.163.com/blog/static/34203127201021022857899/

    http://hi.baidu.com/hengcheng/blog/item/2dc020fa65c9278d9e5146b4.html

  • 相关阅读:
    bzoj 4566: [Haoi2016]找相同字符
    杜教筛模板
    bzoj 3772 :精神污染 线段树+打标记 or 主席树
    bzoj 3779: 重组病毒
    bzoj 3357: [Usaco2004]等差数列
    bzoj 3551: [ONTAK2010]Peaks加强版
    bzoj 4358: permu 莫队
    线段树分裂合并
    bzoj 3065 带插入区间k小值
    子串 [NOIP2015]
  • 原文地址:https://www.cnblogs.com/JavaTechLover/p/2560511.html
Copyright © 2011-2022 走看看