TOR (The Onion Router) известен как средство обеспечения безопасности трафика. С помощью него достигается высокая анонимность благодаря прохождению пакетов в зашифрованном виде через цепочку случайных серверов (или нодов). TOR – уникальное решение для обеспечения анонимности и имеет ряд преимуществ над использованием обычных прокси или цепочки прокси. Самое главное из них – пользователю не нужно постоянно искать списки прокси-серверов. TOR – это сеть множества серверов, организованная таким образом, что пользователю не нужно задумываться о маршруте прохождения пакетов, так как узлы выбираются случайным образом. Именно это обстоятельство позволяет обходить проверку на IP-адрес в различных форумах, чатах и голосованиях, так как почти каждый запрос пользователя посылается через уникальный нод. Эта особенность TOR’а уже давно известна и успешно используется в настоящее время, однако я еще ни разу не встречал в сети методов, описывающих автоматизацию осуществления запросов, например с помощью скрипта. Зачем это нужно? Все очень просто – для накрутки различных головсований и счетчиков. Например, у меня есть предположение, что, если каждый день дергать фид на Feedburner через TOR, тем самым начисляя себе якобы новых читателей, можно существенно поднять тИЦ сайта, так как при включенной опции Awareness API на фидбернере, Яндекс, а также боты различных рейтингов, смогут видеть количество подписчиков. При большом количестве запросов в день через TOR к нашему фиду, можно заставить Яндекс подумать, что у нас целая армия читателей. Но это лишь мои догадки, к тому же это относится больше к SEO, чем к web-безопасности. Тем не менее, я уверен, что можно найти еще множество способов применения автоматизированных средств для работы с TOR. Я написал три варианта PHP-скриптов, реализующих взаимодействие с TOR.
TOR-клиент представляет собой локальный SOCKS-прокси, слушающий порт 9050.
Вариант первый – использование внешней утилиты cURL
<?php $url = "ya.ru"; $paths = array('/usr/bin/curl', '/usr/local/bin/curl', '/bin/curl', '/usr/sbin/curl', '/usr/local/sbin/curl', '/sbin/curl', 'c:/windows/curl.exe'); foreach( $paths as $c ){ if(@file_exists($c)){ $curl = $c; break; } } if(!isset($curl)) die("NO cURL!"); system("$curl --url \"$url\" --socks4a 127.0.0.1:9050"); ?>
Вариант второй – использование PHP-расширения cURL
<?php $url = "ya.ru"; $proxy = "127.0.0.1:9050"; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_PROXY, $proxy); curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5); $result = curl_exec($ch); curl_close($ch); echo $result; ?>
Вариант третий – использование PHP-класса для работы с SOCKS от Jinn
<?php require("./socks.class.php"); $socks_type = 'socks4a'; $socks_ip = "127.0.0.1"; $socks_port = 9050; $socks = new SOCKS; $connect = $socks->telnet($socks_type,$socks_ip,$socks_port); if($connect) { $result = $socks->connect($url,80); if(is_numeric($result)) {die("Error!");} $head = "GET / HTTP/1.0\r\n"; $head .= "Host: $url\r\n"; $head .= "Proxy-Connection: close\r\n\r\n"; $socks->send($head); echo $socks->read(); $socks->close(); } else { echo "Error!"; } ?>
Leave a Reply