proyectos ejemplos python tor

ejemplos - ¿Cómo cambiar la identidad de Tor en Python?



django (6)

Hoy, he buscado mucho sobre esta pregunta, y finalmente logré responder a mí mismo. Pero antes necesito decir que pirvoxy y tor deben configurarse correctamente. Primero script, luego un poco sobre configuración:

import urllib2 from TorCtl import TorCtl proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"}) opener = urllib2.build_opener(proxy_support) def newId(): conn = TorCtl.connect(controlAddr="127.0.0.1", controlPort=9051, passphrase="your_password") conn.send_signal("NEWNYM") for i in range(0, 10): print "case "+str(i+1) newId() proxy_support = urllib2.ProxyHandler({"http" : "127.0.0.1:8118"}) urllib2.install_opener(opener) print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

El script anterior obtiene una nueva IP y lo verifica en el sitio web de ifconfig.me. Sobre la configuración: Necesitamos Privoxy . para usar TOR con conexiones HTTP, privoxy debería funcionar con tor. Podemos hacerlo agregando este archivo a / etc / privoxy / config:

forward-socks5 / localhost:9050 . #dot is important at the end

luego configuramos ControlPort en el archivo / etc / tor / torrc. Solo necesitamos descomentar esta línea:

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

entonces simplemente reiniciamos tor:

/etc/init.d/tor restart

Tengo el siguiente script:

import socks import socket socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) socket.socket = socks.socksocket import urllib2 print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

que utiliza tor y SocksiPy

Ahora quiero cambiar tu identidad con cada solicitud, por ejemplo:

for i in range(0, 10): #somehow change tor identity print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

¿Cómo puedo hacer esto?


Lo siguiente podría funcionar:

for i in range(0, 10): #somehow change tor identity socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050+i) socket.socket = socks.socksocket print(urllib2.urlopen("http://www.ifconfig.me/ip").read())

Básicamente, configura el proxy antes de realizar cada conexión. Supongo que tiene diferentes servidores proxy para diferentes IP ya que no ha indicado cómo desea cambiar la IP


Otra solución simple, no se requieren bibliotecas externas, funciona tanto para IPv4 como para IPv6:

import socket try: tor_c = socket.create_connection((TOR_CTRL_HOST, TOR_CTRL_PORT)) tor_c.send(''AUTHENTICATE "{}"/r/nSIGNAL NEWNYM/r/n''.format(TOR_CTRL_PWD)) response = tor_c.recv(1024) if response != ''250 OK/r/n250 OK/r/n'': sys.stderr.write(''Unexpected response from Tor control port: {}/n''.format(response)) except Exception, e: sys.stderr.write(''Error connecting to Tor control port: {}/n''.format(repr(e)))


Puede habilitar el servidor de control de tor sin comentar algunas líneas en

/etc/tor/torrc

Y use la biblioteca principal para enviar la señal NEWNYM para cambiar el circuito.

controller.signal(Signal.NEWNYM)

Puedes leer el tutorial aquí.


Tor escribió una nueva biblioteca de control TOR en Python, stem . Se puede encontrar en PyPI . Proporcionan algunos buenos tutoriales sobre cómo trabajar con ellos, one de ellos explica cómo cambiar su identidad:

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

Asegúrese de que su configuración es correct .


Este es un video donde estoy usando STEM, SockSipy, Tor 100% trabajando :)

#!/usr/bin/python import socks import socket import time from stem.control import Controller from stem import Signal import urllib2 import sys def info(): print "[*] Welcome to Chart-Cheat Script" print "[*] This script works with running TOR only" print "[*] usage is chartcheat.py domain" print "[*] argument domain must be in format www.example.com" print "[*] Example: chartcheat.py www.example.com" return if len(sys.argv)==2: info(); counter = 0 url = str(sys.argv[1]); with Controller.from_port(port = 9051) as controller: controller.authenticate() socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) socket.socket = socks.socksocket #visiting url in infinite loop while True: urllib2.urlopen("http://"+url) counter=counter+1 print "Page " + url + " visited = " + str(counter) #wait till next identity will be available controller.signal(Signal.NEWNYM) time.sleep(controller.get_newnym_wait()) else: info();

En caso de que esté ejecutando python3, el paquete urllib en python3 será el mismo que el paquete urllib2 en python2.