Comment changer l'identité 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 l'identité tor avec chaque requête, 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 cela?

21
demandé sur nedim 2012-03-27 14:13:07

6 réponses

Tor a écrit une nouvelle bibliothèque de contrôle TOR en Python, stem . Il peut être trouvé sur PyPI . Ils fournissent de beaux tutoriels 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
répondu OrangeTux 2013-11-06 10:06:49

Aujourd'hui, j'ai beaucoup cherché sur cette question, et finalement réussi à me répondre. Mais avant que je dois dire que pirvoxy et tor doivent être configurés correctement. Premier script, puis un 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 le vérifie depuis ifconfig.me site web. À 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 thi /etc/privoxy/config fichier:

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 dé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

Ensuite, nous redémarrons simplement tor:

/etc/init.d/tor restart
20
répondu user873286 2012-03-29 15:41:46

Une autre solution simple, aucune bibliothèque externe requise, Fonctionne à la fois 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)))
12
répondu nedim 2014-04-21 08:53:34

Ceci est une vidéo où im en 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();

Dans le cas où vous exécutez python3, le paquet urllib dans python3 sera le même que le paquet urllib2 dans python2.

3
répondu Edgar 2018-05-20 08:25:12

Vous pouvez activer le serveur de contrôle tor en décommentant quelques lignes dans

/etc/tor/torrc

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

controller.signal(Signal.NEWNYM)

Vous pouvez lire le tutoriel ici.

0
répondu shicky 2016-02-16 08:21:41

Ce qui suit pourrait fonctionner:

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

Vous définissez essentiellement le proxy avant d'établir chaque connexion. Je suppose que vous avez différents proxies pour différentes adresses IP puisque vous n'avez pas indiqué comment vous avez l'intention de changer L'adresse IP

-1
répondu plaisthos 2012-03-29 14:34:42