Python, Requests e Tor proxy

Nel caso in cui avessimo necessita di utilizzare un proxy per estrarre pagine web in modo anonimo possiamo utilizzare l’accoppiata Requests e Tor.

Request è una libreria HTTP di Python che permette di effettuare in modo semplice delle chiamate ad un web server.

Tor è un software che permette di instaurare un servizio di comunicazione anonimo in grado di tutelare la privacy di chi naviga sfruttando i nodi del suo circuito.

Ovviamente dobbiamo installare il programma Tor, potete trovarlo a questo indirizzo: torproject.org.

Dobbiamo anche avere installato la liberia Requests ed una libreria accessoria chiamata pysocks, basta semplicemente utilizzare pip:

pip install requests
pip install pysocks

Per dimostrare il funzionamento andiamo ad usare come servizio verifica del nostro IP il sito httpbin.org. Questo site permette di effettuare vari test con le chiamate HTTP.

Nel nostro caso andiamo a verificare l’indirizo IP che usiamo per navigare andano a fare una richiesta get all’indirizzo: ‘http://httpbin.org/ip‘.

import requests
page = requests.get('http://httpbin.org/ip')
ip = page.text
print(ip)

Otteniamo come risultato in nostro ip, nel mio caso il seguente:
{
"origin": "93.35.165.226, 93.35.165.226"
}

Per utilizzare Tor come proxy per le nostre chiamate dobbiamo creare una sessione con Request, impostare il parametro proxies per poi procedere come abbiamo fatto nella chiamata precedente:

session = requests.session()
session.proxies = {'http':'socks5://127.0.0.1:9150',
'https': 'socks5://127.0.0.1:9150'}
anonymous_request = session.get('http://httpbin.org/ip')
print(anonymous_request.text)

Otteniamo come risultato quello dell'ultimo nodo del circuito Tor che stiamo usando:

{
"origin": "209.141.61.45, 209.141.61.45"
}

I proxies che andiamo ad impostare, per le chiamate HTTP ed HTTPS, vanno a puntare alla porta 9150 che è quella impostata nella nostra macchina (localhost = 127.0.0.1) per le chiamante al servizio di Tor.

Di seguito vi riporto il codice completo dello script ed il link per scaricarlo da GitHub.

import requests
# Chiamata in chiaro
simple_request = requests.get('http://httpbin.org/ip')
response = simple_request.json()
print(f"Questo è il mio indirizzo in chiaro:{response['origin']}")

# Chiamata usando Tor
session = requests.session()
session.proxies = {'http': 'socks5://127.0.0.1:9150',
'https':'socks5://127.0.0.1:9150'}
anonymous_request = session.get('http://httpbin.org/ip')
response = anonymous_request.json()
print(f"Questo è il mio indirizzo mascherato:{response['origin']}")

Dato che il sito che interroghiamo ci risponde con dei dati in formato JSON abbiamo fatto alcune modifiche ed abbiamo usato la funzione json() per formattare i dati ricevuti.

Pubblicato da Ferro Mauro

Contattami se ha bisogno di una consulenza sulla sicurezza aziendale per difenderti dal social engineering