2016-12-31

Cambiar la IP de TOR para python

Resulta muy útil en actividades de scraping poder cambiar la ip de tus bots de vez en cuando 1. Instalar tor
apt-get update apt-get install tor /etc/init.d/tor restart
Ahora debes generar una contraseña para tor
tor --hash-password micontrasenya
Te saldrá un hash de la contraseña. Debes copiar el hash y luego pegarlo en el archivo /etc/tor/torrc Debes descomentar estas dos líneas
ControlPort 9051 HashedControlPassword 16:872860B76453A77D60CA2BB8C1A7042072093276A3D701AD684053EC4C
Una vez hecho esto debes reiniciar tor:
/etc/init.d/tor restart
Ahora instalaremnos Privoxy:
apt-get install privoxy
Ahora hay que añadir esta línea al final del archivo de configuración de Privoxy /etc/privoxy/config:
forward-socks5 / localhost:9050 .
No hay que olvidarse del punto. .Es importante Reiniciamos Privoxy:
/etc/init.d/privoxy restart
Y aquí está el script para ver si funciona:

import time
import socket
import socks
import urllib2

from stem import Signal
from stem.control import Controller


controller = Controller.from_port(port=9051)
controller.authenticate(password='micontrasenya')
def connectTor():
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5 , "127.0.0.1", 9050, True)
    socket.socket = socks.socksocket

def renew_tor():
    controller.signal(Signal.NEWNYM)
    time.sleep(controller.get_newnym_wait()) 

def showmyip():
    new_ip= urllib2.urlopen("http://icanhazip.com/").read()
    print(new_ip)


for i in range(3):
    renew_tor()
    connectTor()
    showmyip()
En los test realizados TOR tardaba entre 10 y 15 segundos en cambiar la IP.