requests python tor

requests - Hacer peticiones usando Python sobre Tor



pip install tor (7)

Aquí está el código que desea usar (descargue el paquete stem usando pip install stem )

from stem import Signal from stem.control import Controller with Controller.from_port(port = 9051) as controller: controller.authenticate(password=''your password set for tor controller port in torrc'') print("Success!") controller.signal(Signal.NEWNYM) print("New Tor connection processed")

Buena suerte y espero que funcione.

Quiero hacer varias solicitudes GET usando Tor a una página web. Quiero usar una dirección ip diferente para cada solicitud.

import socks import socket socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150) socket.socket = socks.socksocket import requests print (requests.get(''http://icanhazip.com'')).content

Usando esto, hice una petición. ¿Cómo puedo cambiar la dirección ip para hacer otra?


Esta respuesta completa la de Ashish Nitin Patil para Windows (no dude en actualizar esta respuesta)

Parte 2

ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE

El HashedControlPassword anterior es la contraseña. Si desea establecer una contraseña diferente en la consola, vaya a /Tor Browser/Browser/TorBrowser/Tor y escriba los siguientes comandos: tor.exe --hash-password password_XYZ | more tor.exe --hash-password password_XYZ | more ). Le dará algo como HashedControlPassword 16:54C092A8... Esta es su contraseña. Ahora puede agregarlo al archivo torrc ( Tor Browser/Browser/TorBrowser/Data/Tor/torrc ).

Necesitarás entonces reiniciar Tor:

tor --service remove tor --service install -options ControlPort 9051

Para comprobar si funciona, escriba netstat -an ahora verá que el puerto 9051 está abierto.

Tenga en cuenta que tor --service install -... creará el servicio Tor Win32 Service . Por alguna razón, parece que tiene que detener el servicio para usar el navegador (ejecute services.msc )

EDITAR: encontrará mucha información here (sobre número de puerto y proxy, Tor, Privoxy, agente de usuario de cambio automático ...).


Este código funciona bien. Usando Tor, cambia la dirección IP después de cada solicitud.

import time, socks, socket from urllib2 import urlopen from stem import Signal from stem.control import Controller nbrOfIpAddresses=3 with Controller.from_port(port = 9051) as controller: controller.authenticate(password = ''my_pwd'') socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) socket.socket = socks.socksocket for i in range(0, nbrOfIpAddresses): newIP=urlopen("http://icanhazip.com").read() print("NewIP Address: %s" % newIP) controller.signal(Signal.NEWNYM) if controller.is_newnym_available() == False: print("Waitting time for Tor to change IP: "+ str(controller.get_newnym_wait()) +" seconds") time.sleep(controller.get_newnym_wait()) controller.close()


Las requests en requesocks son super antiguas, no tienen response.json() y muchas otras cosas.

Me gustaría mantener mi código limpio. Sin embargo, las requests actualmente no tienen socks5 admitido todavía (para obtener más detalles, lea este hilo https://github.com/kennethreitz/requests/pull/478 )

Así que usé Privoxy como un proxy http que conecta Tor por ahora.

Instalar y configurar Privoxy en Mac

brew install privoxy vim /usr/local/etc/privoxy/config # put this line in the config forward-socks5 / localhost:9050 . privoxy /usr/local/etc/privoxy/config

Instalar y configurar Privoxy en Ubuntu

sudo apt-get install privoxy sudo vim /etc/privoxy/config # put this line in the config forward-socks5 / localhost:9050 . sudo /etc/init.d/privoxy restart

Ahora puedo usar Tor como un proxy http. A continuación se muestra mi script de python.

import requests proxies = { ''http'': ''http://127.0.0.1:8118'', } print requests.get(''http://httpbin.org/ip'', proxies=proxies).text


Puede utilizar la biblioteca torrequest (conector descarado). Está disponible en PyPI.

from torrequest import TorRequest with TorRequest() as tr: response = tr.get(''http://ipecho.net/plain'') print(response.text) # not your IP address tr.reset_identity() response = tr.get(''http://ipecho.net/plain'') print(response.text) # another IP address, not yours


Su pregunta tiene 2 aspectos:

  1. Hacer peticiones usando Tor
  2. Renovación de la conexión según el requisito (en su caso, después de cada solicitud)

Parte 1

La primera es fácil de hacer con la última (más de v2.10.0) biblioteca de requests con un requisito adicional de requests[socks] para usar el proxy de calcetines.

Instalación -

pip install requests requests[socks]

Uso básico -

import requests def get_tor_session(): session = requests.session() # Tor uses the 9050 port as the default socks port session.proxies = {''http'': ''socks5://127.0.0.1:9050'', ''https'': ''socks5://127.0.0.1:9050''} return session # Make a request through the Tor connection # IP visible through Tor session = get_tor_session() print(session.get("http://httpbin.org/ip").text) # Above should print an IP different than your public IP # Following prints your normal public IP print(requests.get("http://httpbin.org/ip").text)

Parte 2

Para renovar la Tor Tor IP, es decir, para tener una IP de salida visible nueva, debe poder conectarse al servicio Tor a través de su ControlPort y luego enviar una señal NEWNYM .

La instalación normal de Tor no habilita el ControlPort por defecto. Tendrás que editar tu archivo torrc y descomentar las líneas correspondientes.

ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE

Tenga en cuenta que el HashedControlPassword anterior es para la contraseña "password" . Si desea establecer una contraseña diferente, reemplace HashedControlPassword en el torrc anotando la salida de tor --hash-password "<new_password>" donde <new_password> es la contraseña que desea establecer.

Bien, ahora que hemos configurado Tor correctamente, tendrás que reiniciar Tor si ya se está ejecutando.

sudo service tor restart

Advertencia para los usuarios de Windows: ver post here .

Hay un problema en Windows donde la configuración para el controlport en el archivo torrc se ignora si tor se instaló usando el siguiente comando:

tor --service install

Para resolver el problema, después de editar el archivo torrc, escriba los siguientes comandos:

tor --service remove tor --service install -options ControlPort 9051

Tor debería estar ahora en funcionamiento en el ControlPort 9051 a través del cual podemos enviarle comandos. Prefiero usar la biblioteca de vástagos oficial para controlar Tor.

Instalación -

pip install stem

Ahora puede renovar el Tor IP llamando a la siguiente función.

from stem import Signal from stem.control import Controller # signal TOR for a new connection def renew_connection(): with Controller.from_port(port = 9051) as controller: controller.authenticate(password="password") controller.signal(Signal.NEWNYM)

Para verificar que Tor tiene una nueva IP de salida, simplemente vuelva a ejecutar el código de la Parte 1. Por alguna razón que desconozco, debe crear un nuevo objeto de session para poder usar la nueva IP.

session = get_tor_session() print(session.get("http://httpbin.org/ip").text)


Las solicitudes admiten proxies utilizando el protocolo SOCKS de la versión 2.10.0.

import requests proxies = { ''http'': ''socks5://localhost:9050'', ''https'': ''socks5://localhost:9050'' } url = ''http://httpbin.org/ip'' print(requests.get(url, proxies=proxies).text)