Как стать автором
Обновить

Использование Tor в качестве альтернативы proxy

Часто бывает необходимо использовать proxy для подмены IP-адресов при парсинге и т.д. Но бесплатные proxy только в мышеловке, а платные — не для нас. В качестве альтернативы, можно заюзать Tor. Единственный минус такого подхода — скорость ответа.


Идём сюда и читаем о Tor: ru.wikipedia.org/wiki/Tor

Для установки Tor для Lenny нужно выполнить команду:

apt-get install tor tor-geoipdb

После установки должен быть открыт 9050-ый порт. Для проверки создаём файлик test.php, с кодом:

<?php

function get($url,$proxy) { 
        $ch = curl_init();   
        curl_setopt($ch, CURLOPT_URL,$url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); 
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.1) Gecko/2008070208'); 
        curl_setopt($ch, CURLOPT_PROXY, "$proxy"); 
        $ss=curl_exec($ch); 
        curl_close($ch); 
        return $ss; 
} 



      $prox = 'ip_вашей_машины или localhost:9050';
      $a=get('internet.yandex.ru',$prox); 
      echo $a;

?>


Видно, что IP успешно подменился. Но остаётся при обновлении страницы. После прочтения манулов по Tor, выясняется, что им можно управлять. Для этого лезем в конфиг:

nano /etc/tor/torrc

И меняем следующее:

ControlPort 9051 — разрешаем управлять tor на порту 9051.
SocksListenAddress по умолчанию localhost — означает что tor принимает только соединения с localhost. Для «внешнего» доступа можно поставить 0 или перечислить хосты.

Перезапускаем tor:

/etc/init.d/tor restart

Если
netstat -na

даёт порты 9050 и 9051 в состоянии LISTENING — всё сделали верно.

Ну и теперь мы можем менять промежуточные звенья по принуждению по 9051 порту:

<?php
/**
 * Меняем звено tor
 **/
function tor_new_identity($tor_ip='127.0.0.1', $control_port='9051', $auth_code=''){
    $fp = fsockopen($tor_ip, $control_port, $errno, $errstr, 30);
    if (!$fp) return false; // не можем законнектицца на порт управления
 
    fputs($fp, "AUTHENTICATE $auth_code\r\n");
    $response = fread($fp, 1024);
    list($code, $text) = explode(' ', $response, 2);
    if ($code != '250') return false; 
 
    // шлём запрос на смену звена
    fputs($fp, "signal NEWNYM\r\n");
    $response = fread($fp, 1024);
    list($code, $text) = explode(' ', $response, 2);
    if ($code != '250') return false;
 
    fclose($fp);
    return true;
}


if (tor_new_identity('127.0.0.01', '9051')) {
  // здесь код получения странички через tor
}
?>


Enjoy!
Надеюсь кому-то будет полезно.
Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.