Publicado originalmente no meu blog:
Em sua essência, o
Tor nada mais é que um proxy
SOCKS 5, que vai redirecionar seu tráfego através da rede Tor.
Sendo assim, a única coisa que você deve fazer, é instalar o Tor, executar, configurar um proxy SOCKS 5 no seu código
Python e fazer as solicitações através dele.
A maneira mais simples que eu encontrei de fazer isso é utilizando a biblioteca chamada
requesocks.
A lib requesocks é um fork da lib requests, sendo a única diferença é que ela pode trabalhar com proxy SOCKS. De resto, o funcionamento é idêntico.
Obs.: estarei utilizando Python 2.7.9 neste exemplo. Não sei se a lib requesocks funciona no Python 3.
Vamos ao tutorial:
Instalação da biblioteca requesocks.
Para fazer a instalação da biblioteca requesocks, no meu sistema operacional (
Debian 7), só tive que executar:
sudo pip install requesocks
Caso você não tenha o pip instalado:
sudo apt-get install python-pip
Para testar se está tudo certo, digite:
python
E depois:
>>>
import requesocks
Caso não tenha ocorrido nenhum erro, quer dizer que a biblioteca já está instalada.
Instalação do Tor
A instalação do Tor mais utilizada hoje é o
Tor Browser, que basicamente é o Tor e um browser pré-configurado. Nós não precisamos do browser, apenas do Tor em si. Então acredito que seja melhor fazer uma instalação um pouco diferente.
No repositório padrão do Debian, o Tor está disponível, não tenho certeza em relação a outras distribuições, mas acredito que deve ter também.
No meu caso, a única coisa que preciso fazer é executar o comando:
sudo aptitude install tor
Se você instalou através dos repositórios também, apenas verifique se o serviço Tor já está rodando, e siga em frente para a próxima parte do tutorial.
Caso sua distribuição não tenha o Tor disponibilizado nos seus repositórios, ou, talvez, você seja chato (brinks) e exija usar sempre a versão mais atualizada de tudo, pode fazer o download do source code no site do Projeto Tor.
Depois de baixar o source code e descompactar, basta entrar no diretório do código de fonte e executar os comandos:
./configure
make
E para executar o Tor:
src/or/tor
Não execute o Tor como root. Ele não permite isso. E o bom senso sempre nos diz que se você pode fazer algo como usuário normal, você não deve utilizar o root.
Enfim... após executar esses passos, o Tor já estará executando em um tela do terminal. A saída esperada é algo como:
src/or/tor
Jul 09 01:56:45.521 [notice] Tor v0.2.6.9 (git-d41ab97294ec69c7) running on Linux with Libevent 2.0.21-stable, OpenSSL 1.0.1k and Zlib 1.2.8.
Jul 09 01:56:45.521 [notice] Tor can't help you if you use it wrong! Learn how to be safe at https://www.torproject.org/download/download#warning
Jul 09 01:56:45.521 [notice] Configuration file "/usr/local/etc/tor/torrc" not present, using reasonable defaults.
Jul 09 01:56:45.526 [notice] Opening Socks listener on 127.0.0.1:9050
Jul 09 01:56:45.000 [notice] Bootstrapped 0%: Starting
Jul 09 01:56:46.000 [notice] Bootstrapped 5%: Connecting to directory server
Jul 09 01:56:47.000 [notice] Bootstrapped 10%: Finishing handshake with directory server
Jul 09 01:56:48.000 [notice] Bootstrapped 15%: Establishing an encrypted directory connection
Jul 09 01:56:48.000 [notice] Bootstrapped 20%: Asking for networkstatus consensus
Jul 09 01:56:48.000 [notice] Bootstrapped 25%: Loading networkstatus consensus
Jul 09 01:56:51.000 [notice] Bootstrapped 45%: Asking for relay descriptors
Jul 09 01:56:52.000 [notice] Bootstrapped 50%: Loading relay descriptors)
Jul 09 01:56:56.000 [notice] Bootstrapped 57%: Loading relay descriptors
Jul 09 01:56:59.000 [notice] Bootstrapped 65%: Loading relay descriptors
Jul 09 01:56:59.000 [notice] Bootstrapped 70%: Loading relay descriptors
Jul 09 01:56:59.000 [notice] Bootstrapped 80%: Connecting to the Tor network
Jul 09 01:56:59.000 [notice] Bootstrapped 90%: Establishing a Tor circuit
Jul 09 01:57:00.000 [notice] Tor has successfully opened a circuit. Looks like client functionality is working.
Jul 09 01:57:00.000 [notice] Bootstrapped 100%: Done
Caso tenha aparecido isso, tudo certo.
Colocando em prática
Com o Tor e o requesocks já funcionando, vamos agora começar a escrever nosso código Python.
Importante notar que, por padrão, o Tor abre o proxy SOCKS 5 no localhost, porta 9050. Se você não alterou essa porta, provavelmente é esta mesmo.
A forma mais simples de usar, é:
#! /usr/bin/env python
# coding: utf-8
import requesocks
req = requesocks.session()
# Criamos o objeto
req.proxies = {'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'}
# Setamos que os protocolos http e https irão o proxy socks5
page = req.get('https://marcelo-theodoro.github.io/')
# Fazemos a solicitação
print page.text
# Exibimos o retorno
Geralmente, eu prefiro definir uma função pra fazer as solicitações, algo como:
#! /usr/bin/env python
# coding: utf-8
import requesocks
req = requesocks.session()
req.proxies = {'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'}
def request_tor(url):
page = req.get(url)
text = page.text
return text
print request_tor('https://marcelo-theodoro.github.io/')
Caso você queira confirmar que os requests realmente estão sendo feitos através do Tor, apenas envie um request para a URL:
https://api.ipify.org
Ela vai te retornar o IP pelo qual foi feita a solicitação em modo raw, daí você pode comparar com o seu IP real.
That's all folks.