web-dev-qa-db-fra.com

Comment changer l'identité de Tor en Python?

J'ai le script suivant:

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())

qui utilise tor et SocksiPy

Maintenant, je veux changer d'identité à chaque demande, par exemple:

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

Comment puis-je faire ceci?

22
user873286

Aujourd'hui, j'ai beaucoup cherché sur cette question et j'ai finalement réussi à me répondre. Mais avant d’avoir besoin de dire que pirvoxy et tor doivent être configurés correctement. Premier script, puis un petit peu sur la configuration:

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())

Le script ci-dessus obtient une nouvelle adresse IP et la vérifie à partir du site Web ifconfig.me. À propos de la configuration: Nous avons besoin de Privoxy . Pour utiliser TOR avec des connexions HTTP, privoxy devrait fonctionner avec tor. Nous pouvons le faire en ajoutant ceci au fichier/etc/privoxy/config:

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

ensuite, nous configurons ControlPort dans le fichier/etc/tor/torrc. Nous avons juste besoin de commenter cette ligne:

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

alors on recommence juste pour:

/etc/init.d/tor restart
20
user873286

Tor a écrit une nouvelle bibliothèque de contrôles TOR en Python, stem . On peut le trouver sur PyPI . Ils fournissent quelques tutoriels Nice sur la façon de travailler avec. Un d’entre eux explique comment changer votre identité:

from stem import Signal
from stem.control import Controller

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

Assurez-vous que votre configuration est correcte .

26
OrangeTux

Une autre solution simple, aucune bibliothèque externe requise, fonctionne pour IPv4 et 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)))
13
nedim

Ceci est une vidéo où im utilisant STEM, SockSipy, Tor 100% de travail :)

#!/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();

Si vous utilisez python3, le package urllib dans python3 sera identique au package urllib2 dans python2.

3
Edgar

Vous pouvez activer Tor Control Server en supprimant la mise en commentaire de quelques lignes.

/etc/tor/torrc

Et utilisez la bibliothèque de souches pour envoyer le signal NEWNYM afin de changer de circuit.

controller.signal(Signal.NEWNYM)

Vous pouvez lire le tutoriel ici.

0
shicky