2012-03-28 18 views
10

Estoy intentando controlar Tor con Python. He leído algunas de las otras preguntas sobre este tema en stackoverflow, pero ninguna de ellas responde esta pregunta.Python - Control Tor

Estoy buscando un método para que le proporcione una "nueva identidad", una nueva dirección IP, cuando se ejecuta el comando. Busqué en Google y encontré el módulo TorCtl como un método para controlar tor, pero no puedo encontrar una manera de obtener una nueva identidad. Esto es lo que tengo hasta ahora para conectarme al menos con Tor, pero no puedo ir más lejos.

from TorCtl import TorCtl 

conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="123") 

Cualquier ayuda en esto se aprecia, si hay otros módulos torctl mejor que eso sería genial también! ¡Gracias!

Respuesta

6

Bueno, tuve suerte de encontrar un script PHP que hiciera exactamente lo mismo que quería, y con la ayuda de eso lo convertí a trabajar en TorCtl. ¡Esto es lo que parece para cualquier otra persona que lo necesite en el futuro!

from TorCtl import TorCtl 

conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="123") 

TorCtl.Connection.send_signal(conn, "NEWNYM") 
2

Puede utilizar un código similar en Python:

def renewTorIdentity(self, passAuth): 
    try: 
     s = socket.socket() 
     s.connect(('localhost', 9051)) 
     s.send('AUTHENTICATE "{0}"\r\n'.format(passAuth)) 
     resp = s.recv(1024) 

     if resp.startswith('250'): 
      s.send("signal NEWNYM\r\n") 
      resp = s.recv(1024) 

      if resp.startswith('250'): 
       print "Identity renewed" 
      else: 
       print "response 2:", resp 

     else: 
      print "response 1:", resp 

    except Exception as e: 
     print "Can't renew identity: ", e 

Puede comprobar this post for a mini-tutorial

1

Al parecer el paquete tallo funciona mejor. Puede instalarlo en su computadora y mantenerlo funcionando en la terminal. A continuación, ejecute el siguiente programa:

from stem import Signal 
from stem.control import Controller 

with Controller.from_port(port = 9051) as controller: 
    controller.authenticate() 
    controller.signal(Signal.NEWNYM) 

tallo es el paquete oficial desarrollado por tor.org, y se puede ver su documentation

Cuestiones relacionadas