Ich habe das folgende Skript:
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())
welche tor und SocksiPy verwendet
Nun möchte ich mit jeder Anfrage die Identität ändern, zum Beispiel:
for i in range(0, 10):
#somehow change tor identity
print(urllib2.urlopen("http://www.ifconfig.me/ip").read())
Wie kann ich das machen?
Heute habe ich viel über diese Frage gesucht und es schließlich geschafft, mich selbst zu beantworten. Aber bevor ich sagen muss, dass Pirvoxy und Tor korrekt konfiguriert sein sollten. Erstes Skript, dann etwas zur Konfiguration:
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())
Das obige Skript erhält eine neue IP und prüft sie von der ifconfig.me-Website. Über die Konfiguration: Wir brauchen Privoxy . Um TOR mit HTTP-Verbindungen zu verwenden, sollte Privoxy mit Tor funktionieren. Wir können dies tun, indem Sie thi zur Datei/etc/privoxy/config hinzufügen:
forward-socks5 / localhost:9050 . #dot is important at the end
dann konfigurieren wir ControlPort in der Datei/etc/tor/torrc. Wir brauchen diese Zeile nur zu kommentieren:
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
dann fangen wir einfach neu an:
/etc/init.d/tor restart
Tor hat eine neue TOR-Kontrollbibliothek in Python geschrieben, stem . Es kann auf PyPI gefunden werden. Sie bieten einige Nizza-Tutorials, wie man damit arbeitet, one von ihnen erklärt, wie man seine Identität ändert:
from stem import Signal
from stem.control import Controller
with Controller.from_port(port = 9051) as controller:
controller.authenticate()
controller.signal(Signal.NEWNYM)
Stellen Sie sicher, dass Ihre Konfiguration korrekt ist.
Eine weitere einfache Lösung, die keine externen Bibliotheken benötigt, funktioniert sowohl für IPv4 als auch für 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)))
Dies ist ein Video bei dem ich STEM, SockSipy, Tor zu 100% arbeite :)
#!/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();
Falls Sie python3 ausführen, entspricht das urllib-Paket in python3 dem urllib2-Paket in python2.
Sie können einen Tor Control-Server aktivieren, indem Sie einige Zeilen einkommentieren
/etc/tor/torrc
Und verwenden Sie die Stammbibliothek, um das NEWNYM-Signal zu senden, um die Schaltung zu ändern.
controller.signal(Signal.NEWNYM)