Solicitações através do Tor utilizando Python

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.

[ Hits: 8.770 ]

Por: Marcelo Theodoro em 14/07/2015


Introdução



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.

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Hidden Service - Disponibilizando seu site na Deep Web através do Tor

Tor e Hidden Service Protocol - Explicando tecnicamente a "Deep Web"

Leitura recomendada

Empacotamento e compactadores de arquivos

Entendendo a estrutura do Linux

Mageia Linux 8

Fundamentos do sistema Linux - hardware

Diário de um SysAdmin 2 - Truques | Macetes | Atalhos & Comandos

  
Comentários
[1] Comentário enviado por wagnerfs em 15/07/2015 - 22:55h

Parabéns pelo artigo e por compartilhar o conhecimento.
_________________________
Wagner F. de Souza
Técnico/Instrutor de Informática
"GNU/Linux for human beings."
LPI ID: LPI000297782

[2] Comentário enviado por turok360 em 17/07/2015 - 13:29h


Obrigado por compartilhar!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts