简单介绍
在网络上经常看到代理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访问频率超过这个阈值,说明这个不是人在访问,而是一个爬虫程序。
那么我们就要通过三个方向来隐藏自己
- 设置好UA和Headers信息,仿浏览器
- 同IP访问频率控制
- 使用高匿的代理IP
PHP检测代理服务器的匿名级别
检查匿名级别主要通过$_SERVER
的REMOTE_ADDR
、HTTP_VIA
、HTTP_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;
}