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

  • 相关阅读:
    深浅复制
    iOS 和 H5 页面交互(WKWebview 和 UIWebview cookie 设置)
    iPhone 启动页尺寸
    AVAssetDownloadURLSession 简述
    iOS性能优化
    测试用例编写
    flutter_boot android和flutter源码阅读记录
    com.android.tools.aapt2.Aapt2Exception: AAPT2 error: check logs for details
    android sdk tools里找不到draw9patch.bat 如何制作.9.png 格式图片
    排球比赛计分系统
  • 原文地址:https://www.cnblogs.com/JavaTechLover/p/2560511.html
Copyright © 2011-2022 走看看