使用PHP檢測代理匿名級別
使用PHP檢測代理匿名級別如何使用PHP檢測ip代理匿名級別
在構(gòu)建涉及抓取,下載數(shù)據(jù)和自動化的應(yīng)用程序時,完全匿名對于開發(fā)人員可能是一個巨大的問題。盡管那里有許多不同的代理檢查器,但大多數(shù)檢查器似乎都提供了稍微不同且不可靠的結(jié)果。
本指南將引導(dǎo)您完成這三個步驟,并提供干凈的PHP代碼以準確檢測特定代理的匿名性。
代理匿名的不同級別是什么?
精英(高匿名者)
您的代理完全無法檢測,您的真實IP將保持隱藏狀態(tài)。您連接到的服務(wù)器不會知道您正在使用代理。這些是您可以找到的最佳代理,匿名性和質(zhì)量的水平是空前的。
匿名
盡管您的代理IP在連接到匿名代理時仍處于隱藏狀態(tài),但是某些服務(wù)器和代理檢測腳本將能夠檢測到您正在使用代理。盡管這些代理對于白帽實踐和數(shù)據(jù)挖掘仍然很有用,但是您的原始IP仍然有幾率暴露。
透明
您的原始IP將被公開,每個人都將知道您正在使用代理。極度冒險,強烈建議在嘗試匿名時避免使用透明代理。
第1步-創(chuàng)建代理網(wǎng)關(guān)
第一步是在服務(wù)器上設(shè)置一個網(wǎng)關(guān),該網(wǎng)關(guān)將模擬其他任何服務(wù)器將用來確定您是否使用$ _SERVER超全局變量的代理。確??梢酝ㄟ^公共URL(http://yourdomain.com/gateway.php)訪問此PHP文件。由于$ _SERVER以數(shù)組形式輸出,因此您需要進行一些格式化。這是我如何將gateway.php中的輸出格式化為字符串以輕松提取代理匿名性測試器的數(shù)據(jù)的示例:
$ output =”;
foreach($ _SERVER as $ key => $ value){
if(!empty($ value)){
$ output。= $ key。'-‘ $ value。'—‘;
}
}
$輸出= SUBSTR($輸出,0,-3);
die($ output);
第2步-連接到服務(wù)器網(wǎng)關(guān)并檢索結(jié)果
設(shè)置好網(wǎng)關(guān)之后,您就可以使用代理連接到網(wǎng)關(guān)并檢索$ _SERVER輸出,該輸出將顯示代理的匿名性。下面是一些簡單的PHP代碼,使用cURL訪問您的網(wǎng)關(guān)URL(例如yourdomain.com/gateway.php)。這個簡單的cURL腳本將檢測您代理的協(xié)議是HTTP,SOCKS4,SOCKS5還是SOCKS4 / 5,因此無需事先確定。
注意:確保$ url變量設(shè)置為網(wǎng)關(guān)URL,$ proxy變量設(shè)置為要測試的代理(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-使用網(wǎng)關(guān)結(jié)果檢查代理匿名
從上面的gatewayResults函數(shù)返回服務(wù)器數(shù)據(jù)之后,只需將其傳遞給下面的函數(shù),它將返回代理匿名級別。
public function checkAnonymity($server = array()) {
$realIp = $_SERVER[‘REMOTE_ADDR’];
$level = ‘transparent’;
if (!in_array($realIp, $server)) {
$level = ‘a(chǎn)nonymous’;
$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;
}