Python - Usando requests anônimos através da rede Tor

A biblioteca requests é muito usada para web scraping em Python. Com ela é possível extrair informações de websites de forma automatizada. Neste artigo veremos como integrar a requests com a rede Tor usando Linux.

[ Hits: 6.027 ]

Por: Fábio Berbert de Paula em 02/02/2021 | Blog: https://mestrefabio.com


Introdução



Para a criação do artigo usei um desktop Linux rodando Debian 10 Buster. O processo de instalação e configuração do ambiente necessário não deve mudar muito caso esteja usando outra distribuição.

Para início de conversa, vamos atualizar a lista de pacotes dos repositórios APT:

sudo apt update

Em seguida instale o Tor:

sudo apt install tor

Também precisaremos instalar suporte aos protocolos de obfuscação (obfuscation protocols):

sudo apt install obfs4proxy

Configuração do Tor

Entre no diretório de configuração do Tor:

cd /etc/tor/

Faça um backup do arquivo de configuração original:

sudo cp torrc torrc.original

E substitua todas as linhas do arquivo original pelo conteúdo abaixo:

sudo vim torrc

BridgeRelay 1

# Replace "TODO1" with a Tor port of your choice.
# This port must be externally reachable.
# Avoid port 9001 because it's commonly associated with Tor and censors may be scanning the Internet for this port.
ORPort 12345

ServerTransportPlugin obfs4 exec /usr/bin/obfs4proxy

# Replace "TODO2" with an obfs4 port of your choice.
# This port must be externally reachable and must be different from the one specified for ORPort.
# Avoid port 9001 because it's commonly associated with Tor and censors may be scanning the Internet for this port.
ServerTransportListenAddr obfs4 0.0.0.0:23456

# Local communication port between Tor and obfs4.  Always set this to "auto".
# "Ext" means "extended", not "external".  Don't try to set a specific port number, nor listen on 0.0.0.0.
ExtORPort auto

# Replace "" with your email address so we can contact you if there are problems with your bridge.
# This is optional but encouraged.
ContactInfo

# Pick a nickname that you like for your bridge.  This is optional.
Nickname PickANickname

Não esqueça de substituir as seguintes linhas por algo de sua preferência:
  • ORPort 12345 - aqui coloquei 12345
  • ServerTransportListenAddr obfs4 0.0.0.0:23456 - aqui coloquei 23456
  • ContactInfo - preencha com seu email
  • Nickname PickANickname - preencha com seu nickname

Reinicie o serviço Tor:

sudo systemctl restart tor

Código Python

Crie um script em Python com o seguinte conteúdo:

import requests
session = requests.session()
session.proxies = {}

session.proxies['http'] = 'socks5h://localhost:9050'
session.proxies['https'] = 'socks5h://localhost:9050'

// requisição NORMAL
r = requests.get('http://httpbin.org/ip')
print(r.text)

// requisição pela rede TOR
r = session.get('http://httpbin.org/ip')
print(r.text)

O código é bem simples, em resumo criamos uma sessão (session) de requests e nela configuramos os servidores proxy para os protocolos http e https, que são direcionados para o serviço tor-socks que roda na porta 9050 da máquina local.

Se você usar requests.get() o Python irá usar a chamada tradicional da biblioteca requests, o que resultará numa request usando seu IP local.

Se você usar session.get() o Python realizará a request usando a sessão criada, onde a requisição irá passar pelo tor-socks e consequentemente terá um IP anônimo.

Enfim, é isso. Espero que o artigo tenha sido útil.

Referências


   

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

A função DATE_FORMAT() do MySQL

Criando seu próprio servidor de DNS dinâmico (nsupdate + bind9)

Criando um sistema de banners rotativos em PHP

Organizando projetos com a classe FastTemplate (parte 1)

EAuthenticator - Clone do Google Authenticator para Linux

Leitura recomendada

Python Flask Básico

Integração do ChatGPT em uma API Python

Interagindo com servidores HTTP com Python

Gerar Códigos QRCode com Python

Programe em Python no jogo Minecraft com seu filho ou sozinho

  
Comentários
[1] Comentário enviado por maurixnovatrento em 02/02/2021 - 22:35h


Bem bacana.

___________________________________________________________
[code]Conhecimento não se Leva para o Túmulo.
https://github.com/MauricioFerrari-NovaTrento [/code]

[2] Comentário enviado por CapitainKurn em 07/02/2021 - 07:14h

Show!


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts