使用PHP检测代理匿名级别

使用PHP检测代理匿名级别如何使用PHP检测ip代理匿名级别

在构建涉及抓取,下载数据和自动化的应用程序时,完全匿名对于开发人员可能是一个巨大的问题。尽管那里有许多不同的代理检查器,但大多数检查器似乎都提供了稍微不同且不可靠的结果。

本指南将引导您完成这三个步骤,并提供干净的PHP代码以准确检测特定代理的匿名性。

代理匿名的不同级别是什么?

精英(高匿名者)

您的代理完全无法检测,您的真实IP将保持隐藏状态。您连接到的服务器不会知道您正在使用代理。这些是您可以找到的最佳代理,匿名性和质量的水平是空前的。

匿名

尽管您的代理IP在连接到匿名代理时仍处于隐藏状态,但是某些服务器和代理检测脚本将能够检测到您正在使用代理。尽管这些代理对于白帽实践和数据挖掘仍然很有用,但是您的原始IP仍然有几率暴露。

透明

您的原始IP将被公开,每个人都将知道您正在使用代理。极度冒险,强烈建议在尝试匿名时避免使用透明代理。

第1步-创建代理网关

第一步是在服务器上设置一个网关,该网关将模拟其他任何服务器将用来确定您是否使用$ _SERVER超全局变量的代理。确保可以通过公共URL(http://yourdomain.com/gateway.php)访问此PHP文件。由于$ _SERVER以数组形式输出,因此您需要进行一些格式化。这是我如何将gateway.php中的输出格式化为字符串以轻松提取代理匿名性测试器的数据的示例:

$ output =”;
foreach($ _SERVER as $ key => $ value){
if(!empty($ value)){
$ output。= $ key。'-‘ $ value。'—‘;
}
}
$输出= SUBSTR($输出,0,-3);
die($ output);

第2步-连接到服务器网关并检索结果

设置好网关之后,您就可以使用代理连接到网关并检索$ _SERVER输出,该输出将显示代理的匿名性。下面是一些简单的PHP代码,使用cURL访问您的网关URL(例如yourdomain.com/gateway.php)。这个简单的cURL脚本将检测您代理的协议是HTTP,SOCKS4,SOCKS5还是SOCKS4 / 5,因此无需事先确定。

注意:确保$ url变量设置为网关URL,$ proxy变量设置为要测试的代理(IP:PORT格式)。

$types = array(
‘http’,
‘socks4’,
‘socks5’
);
$url = curl_init($url);
curl_setopt($url, CURLOPT_PROXY, $proxy);
foreach ($types as $type) {
switch ($type) {
case ‘http’:
curl_setopt($url, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
break;
case ‘socks4’:
curl_setopt($url, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
break;
case ‘socks5’:
curl_setopt($url, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
break;
}
curl_setopt($url, CURLOPT_TIMEOUT, 10);
curl_setopt($url, CURLOPT_RETURNTRANSFER, 1);
$resultsQuery = explode(‘—‘, curl_exec($url));
if (!empty($resultsQuery)) {
break;
}
}
$results = array();
foreach ($resultsQuery as $result) {
if (!empty($result)) {
$split = explode(‘–‘, $result);

if (!empty($split[1])) {
$results[$split[0]] = $split[1];
}
}
}
curl_close($url);
unset($url);
return $results;
}

步骤3-使用网关结果检查代理匿名

从上面的gatewayResults函数返回服务器数据之后,只需将其传递给下面的函数,它将返回代理匿名级别。

public function checkAnonymity($server = array()) {
$realIp = $_SERVER[‘REMOTE_ADDR’];
$level = ‘transparent’;
if (!in_array($realIp, $server)) {
$level = ‘anonymous’;
$proxyDetection = array(
‘HTTP_X_REAL_IP’,
‘HTTP_X_FORWARDED_FOR’,
‘HTTP_X_PROXY_ID’,
‘HTTP_VIA’,
‘HTTP_X_FORWARDED_FOR’,
‘HTTP_FORWARDED_FOR’,
‘HTTP_X_FORWARDED’,
‘HTTP_FORWARDED’,
‘HTTP_CLIENT_IP’,
‘HTTP_FORWARDED_FOR_IP’,
‘VIA’,
‘X_FORWARDED_FOR’,
‘FORWARDED_FOR’,
‘X_FORWARDED FORWARDED’,
‘CLIENT_IP’,
‘FORWARDED_FOR_IP’,
‘HTTP_PROXY_CONNECTION’,
‘HTTP_XROXY_CONNECTION’
);
if (!array_intersect(array_keys($server), $proxyDetection)) {
$level = ‘elite’;
}
}
return $level;
}