简单介绍

在网络上经常看到代理IP这个词汇,现在很多从事网络营销的人对代理IP都不陌生,代理IP可以说是改变了我们的生活,

代理IP分为三种:

  • 1、透明代理ip
  • 2、普通代理ip
  • 3、高匿代理ip

顾名思义,我们能简单的了解这三种代理IP的区别,那么现在使用最多的,最受欢迎的是哪种呢是高匿代理IP

为什么这么说呢高匿代理ip,在不改变客户机的请求下同时也可以隐藏用户的IP地址,这样就如同一个真正的客户在浏览访问网页,同时客户的IP是隐藏不被查询到的.这样的话客户端就不会认为用户使用了代理ip,同时也保障了用户的隐私。

所以从安全性来说高匿代理ip是比较好的选择

如何隐藏爬虫身份

有一些网站不喜欢被爬虫程序访问,所以会检测连接对象,如果是爬虫程序,也就是非人点击访问,它就会不让你继http代理服务器续访问,所以为了要让程序可以正常运行,需要隐藏自己的爬虫程序的身份。

此时,我们就可以通过设置UserAgent的来达到隐藏身份的目的, UserAgent的中文名为用户代理,简称UA。UA存放于Headers中,服务器就是通过查看Headers中的UserAgent来判断是谁在访问

在python中,如果不设置UserAgent,程序将使用默认的参数,那么这个UserAgent就会有Python的字样,如果服务器检查UserAgent,那么没有设置UserAgent的Python程序将无法正常访问网站。

如果我们利用一个爬虫程序在网站爬取东西,一个固定IP的访问频率就会很高,这不符合人为操作的标准,因为人操作不可能在国外代理服务器几ms内,进行如此频繁的访问。所以一些网站会设置一个IP访问频率的阈值,如果一个IP访问频率超过这个阈值,说明这个不是人在访问,而是一个爬虫程序。


那么我们就要通过三个方向来隐藏自己

  1. 设置好UA和Headers信息,仿浏览器
  2. 同IP访问频率控制
  3. 使用高匿的代理IP

PHP检测代理服务器的匿名级别

检查匿名级别主要通过$_SERVERREMOTE_ADDRHTTP_VIAHTTP_X_FORWARDED_FOR三个值进行判断

1、不使用代理的情况下,三个值分别是:

$_SERVER['REMOTE_ADDR']:为您的真实的IP地址

$_SERVER['HTTP_VIA']:无值或不显示

$_SERVER['HTTP_X_FORWARDED_FOR']:没有数值或不显示

2、使用透明代理(TransparentProxies)的情况下三个值分别是:

$_SERVER['REMOTE_ADDR']:代理服务器IP

$_SERVER['HTTP_VIA']:代理服务器IP(这个由代理服务器填充,有时会填充网关信息,或不填充)

$_SERVER['HTTP_X_FORWARDED_FOR']:真实的IP

隐藏了您的真实IP,但是向访问对象透露了您是使用代理服务器访问他们的。

3、使用普通匿名代理(AnonimousProxies)的情况下三个值分别是:

$_SERVER['REMOTE_ADDR']:代理服务器IP

$_SERVER['HTTP_VIA']:代理服务器IP(这个由代理服务器填充,有时会填充网关信息,或不填充)

$_SERVER['HTTP_X_FORWARDED_FOR']:代理服务器IP

使用普通匿名代理虽然隐藏了您的真实IP,但向访问对象暴露了你是使用代理服务器在访问它们。

4、使用欺骗性代理(DistortingProxies)的情况下三个值分别是:

$_SERVER['REMOTE_ADDR']:代理服务器IP

$_SERVER['HTTP_VIA']:代理服务器IP(这个由代理服务器填充,有时会填充网关信息,或不填充)

$_SERVER['HTTP_X_FORWARDED_FOR']:随机的IP

这种代理服务器编造了一个虚假的随机IP代替了您的真实IP欺骗您的访问对象

5、使用高匿名代理(HighAnonymityProxies)的情况下三个值分别是:

$_SERVER['REMOTE_ADDR']:代理服务器IP

$_SERVER['HTTP_VIA']:没有数值或不显示

$_SERVER['HTTP_X_FORWARDED_FOR']:没有数值或不显示

完全用代理服务器信息替代了您的所有信息。

注意

如果网站做了负载均衡HTTP_X_FORWARDED_FOR这个值也可能就是你的真实客户端IP

    /**
     * 获取客户端IP
     * @return string
     */
    public static function getIP()
    {
        if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])) {
            $thisip = $_SERVER["HTTP_X_FORWARDED_FOR"];
        } else {
            if (isset($_SERVER["HTTP_CLIENT_IP"])) {
                $thisip = $_SERVER["HTTP_CLIENT_IP"];
            } else {
                $thisip = isset($_SERVER["REMOTE_ADDR"])?$_SERVER["REMOTE_ADDR"]:'localhost';
            }
        }
        if (strpos($thisip, "10.0.0.") !== false ||
            strpos($thisip, "192.168.") !== false ||
            strpos($thisip, "127.0.0.") !== false ||
            strpos($thisip, "172.16.0.") !== false
        ) {
            $thisip = $_SERVER["REMOTE_ADDR"];
        }

        return $thisip;
    }