Fallo general del servidor SOCKS al cambiar de identidad utilizando una raíz

Tengo Tor ejecutándose en un servidor remoto (Ubuntu) en el puerto 9150 con el puerto de control en 9151. He confirmado que ambos se ejecutan a través de netstat -ant.

Aquí está mi código que está provocando el SOCKS5Error: 0x01: General SOCKS server failure Error SOCKS5Error: 0x01: General SOCKS server failure .

 import socks import socket socks.set_default_proxy(socks.SOCKS5, server_ip, 9150) socket.socket = socks.socksocket 

Puedo hacer solicitudes desde cualquier biblioteca y obtener respuestas exitosamente con una dirección IP de tor.

Sin embargo, lo siguiente es lo que causa el error:

 from stem import Signal from stem.control import Controller with Controller.from_port(port = 9151) as controller: controller.authenticate(password) controller.signal(Signal.NEWNYM) 

Si ejecuto lo anterior sin configurar el proxy utilizando calcetines (primer fragmento), puedo emitir señales sin problemas.

No puedes abrir un nuevo controlador una vez que te has conectado a Tor. Intenta abrir un controlador justo en la parte superior de tu script. Entonces, tanto la conexión Tor como el señalizador usan el mismo objeto controlador.

Esto parece funcionar con Python3:

 import time import socket import socks import requests from bs4 import BeautifulSoup from stem import Signal from stem.control import Controller controller = Controller.from_port(port=9051) def connectTor(): socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5 , "127.0.0.1", 9050, True) socket.socket = socks.socksocket def renew_tor(): controller.authenticate() controller.signal(Signal.NEWNYM) def show_my_ip(): url = "http://www.showmyip.gr/" r = requests.Session() page = r.get(url) soup = BeautifulSoup(page.content, "lxml") ip_address = soup.find("span",{"class":"ip_address"}).text.strip() print(ip_address) for i in range(10): renew_tor() connectTor() showmyip() time.sleep(10) 

Su primer fragmento es el tráfico de proxy, pero el método Controller.from_port () de Stem también usa el módulo de socket. Como tal, Stem intenta conectarse a su puerto de control local, recibe un proxy a través de un nodo de salida tor, y luego no puede conectarse.

Vi que este error ocurre cuando intenta abrir una nueva conexión al puerto 9051, mientras que una conexión antigua aún está abierta. Resolví el problema de esta manera.

 #----------------Cut Here---------------------- import stem from stem import Signal from stem.control import Controller from stem.connection import connect import time # # Create a new controller # controller = Controller.from_port() Password = "My_Personal_Password" # def renew_tor(): global controller global Password print ('Renewing Tor Circuit') if "stem.control.Controller" not in str(controller): #if global controller exist no more controller = Controller.from_port() # debug output print (controller) # authenticare the connection with the server control port controller.authenticate(Password) print ('Tor running version is : %s' % controller.get_version() ) # force a new circuit controller.signal(Signal.NEWNYM) # wait for new circuit time.sleep(10) print ('New Tor circuit estabilished') if __name__ == "__main__": for i in range (10000): print ( " Attempt n. : %i " % i) renew_tor() #----------------Cut Here(end)-------------------------------------------- 

Desde su contraseña personal puede crear un hash con el comando

tor –hash contraseña My_Personal_Password

y la cadena resultante tiene el formato

16: CA850F5648 ………

Esto debe ser insertado en el archivo / etc / tor / torrc

debajo:

HashedControlPassword 16: CA850F5648 ………