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?
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.
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
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)))
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.
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)
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