Ich möchte mit Tor mehrere GET-Anfragen an eine Webseite stellen. Ich möchte für jede Anfrage eine andere IP-Adresse verwenden.
import socks
import socket
socks.set_default_proxy(socks.SOCKS5, "127.0.0.1", 9150)
socket.socket = socks.socksocket
import requests
print (requests.get('http://icanhazip.com')).content
Damit habe ich eine Anfrage gestellt. Wie kann ich die IP-Adresse ändern, um eine andere zu erstellen?
Antworten:
Hier ist der Code, den Sie verwenden möchten (laden Sie das Stammpaket mit herunter
pip install stem
)from stem import Signal from stem.control import Controller with Controller.from_port(port = 9051) as controller: controller.authenticate(password='your password set for tor controller port in torrc') print("Success!") controller.signal(Signal.NEWNYM) print("New Tor connection processed")
Viel Glück und hoffentlich funktioniert das.
quelle
Ihre Frage hat zwei Aspekte:
Teil 1
Die erste ist einfach mit der neuesten
requests
Bibliothek (ab Version 2.10.0) zu erstellen, mit der zusätzlichen Anforderungrequests[socks]
, den Socken-Proxy zu verwenden.Installation -
Grundlegende Verwendung -
import requests def get_tor_session(): session = requests.session() # Tor uses the 9050 port as the default socks port session.proxies = {'http': 'socks5://127.0.0.1:9050', 'https': 'socks5://127.0.0.1:9050'} return session # Make a request through the Tor connection # IP visible through Tor session = get_tor_session() print(session.get("http://httpbin.org/ip").text) # Above should print an IP different than your public IP # Following prints your normal public IP print(requests.get("http://httpbin.org/ip").text)
Teil 2
Um die Tor-IP zu erneuern, dh um eine neue sichtbare Exit-IP zu haben, müssen Sie in der Lage sein, über diese eine Verbindung zum Tor-Dienst herzustellen
ControlPort
und dann einNEWNYM
Signal zu senden .Die normale Tor-Installation aktiviert die
ControlPort
Standardeinstellung nicht. Sie müssen Ihre Torrc-Datei bearbeiten und die entsprechenden Zeilen auskommentieren .ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
Bitte beachten Sie, dass das
HashedControlPassword
oben Gesagte für das Passwort gilt"password"
. Wenn Sie ein anderes Kennwort festlegen möchten, ersetzen dieHashedControlPassword
in der torrc durch Hinweis auf die Ausgabe vontor --hash-password "<new_password>"
wo<new_password>
ist das Passwort , das Sie einstellen möchten................................................... ..............................
Warnung für Windows-Benutzer: siehe Beitrag hier .
In Windows tritt ein Problem auf, bei dem die Einstellung für den Steuerport in der Torrc-Datei ignoriert wird, wenn tor mit dem folgenden Befehl installiert wurde:
Geben Sie nach dem Bearbeiten Ihrer Torrc-Datei die folgenden Befehle ein, um das Problem zu beheben:
tor --service remove tor --service install -options ControlPort 9051
.................................................. ..............................
Okay, jetzt, da wir Tor richtig konfiguriert haben, müssen Sie Tor neu starten, wenn es bereits läuft.
Tor sollte jetzt auf dem 9051 betriebsbereit sein,
ControlPort
über den wir Befehle an ihn senden können. Ich bevorzuge die offizielle Stammbibliothek , um Tor zu kontrollieren.Installation -
Sie können jetzt die Tor-IP erneuern, indem Sie die folgende Funktion aufrufen.
IP erneuern -
from stem import Signal from stem.control import Controller # signal TOR for a new connection def renew_connection(): with Controller.from_port(port = 9051) as controller: controller.authenticate(password="password") controller.signal(Signal.NEWNYM)
Um zu überprüfen, ob Tor eine neue Exit-IP hat, führen Sie einfach den Code aus Teil 1 erneut aus. Aus einem mir unbekannten Grund müssen Sie ein neues
session
Objekt erstellen , um die neue IP zu verwenden.session = get_tor_session() print(session.get("http://httpbin.org/ip").text)
quelle
pip install request[socks]
(wenn Sie einen Fehler erhaltenpip uninstall request
und versuchen, erneut zu installieren)Sie können die
torrequest
Bibliothek (schamloser Stecker) verwenden. Es ist auf PyPI verfügbar.from torrequest import TorRequest with TorRequest() as tr: response = tr.get('http://ipecho.net/plain') print(response.text) # not your IP address tr.reset_identity() response = tr.get('http://ipecho.net/plain') print(response.text) # another IP address, not yours
quelle
tr.reset_identity()
ändert die IP-Adresse nicht. Vermisse ich etwas Muss ich die tor-Konfigurationsdatei ändern oder so?Sie können die Implementierung des Pure -Python-Tor-Protokolls Torpy ausprobieren . Keine Notwendigkeit für den ursprünglichen Tor-Client oder die Stammabhängigkeit.
$ pip3 install torpy[requests] ... $ python3.7 >>> from torpy.http.requests import TorRequests >>> with TorRequests() as tor_requests: ... print("build circuit") ... with tor_requests.get_session() as sess: ... print(sess.get("http://httpbin.org/ip").json()) ... print(sess.get("http://httpbin.org/ip").json()) ... print("renew circuit") ... with tor_requests.get_session() as sess: ... print(sess.get("http://httpbin.org/ip").json()) ... print(sess.get("http://httpbin.org/ip").json()) ... build circuit {'origin': '23.129.64.190, 23.129.64.190'} {'origin': '23.129.64.190, 23.129.64.190'} renew circuit {'origin': '198.98.50.112, 198.98.50.112'} {'origin': '198.98.50.112, 198.98.50.112'}
Jedes Mal, wenn Sie eine neue Sitzung erhalten, erhalten Sie eine neue Identität (im Grunde erhalten Sie eine neue Schaltung mit einem neuen Ausgangsknoten). Weitere Beispiele finden Sie in der Readme-Datei https://github.com/torpyorg/torpy
quelle
Requests unterstützt Proxys mit dem SOCKS-Protokoll ab Version 2.10.0.
import requests proxies = { 'http': 'socks5://localhost:9050', 'https': 'socks5://localhost:9050' } url = 'http://httpbin.org/ip' print(requests.get(url, proxies=proxies).text)
quelle
Failed to establish a new connection
Diese Antwort vervollständigt die von Ashish Nitin Patil für Windows (Sie können diese Antwort jederzeit aktualisieren).
Teil 2
ControlPort 9051 ## If you enable the controlport, be sure to enable one of these ## authentication methods, to prevent attackers from accessing it. HashedControlPassword 16:05834BCEDD478D1060F1D7E2CE98E9C13075E8D3061D702F63BCD674DE
Das
HashedControlPassword
obige ist das Passwort. Wenn Sie in der Konsole ein anderes Kennwort festlegen möchten, navigieren Sie zu\Tor Browser\Browser\TorBrowser\Tor
den folgenden Befehlen und geben Sie sie ein :)tor.exe --hash-password password_XYZ | more
. Es gibt Ihnen so etwas wieHashedControlPassword 16:54C092A8...
Dies ist Ihr Passwort. Jetzt können Sie es der Torrc-Datei (Tor Browser\Browser\TorBrowser\Data\Tor\torrc
) hinzufügen .Sie müssen dann Tor neu starten:
tor --service remove tor --service install -options ControlPort 9051
Um zu überprüfen, ob dies funktioniert, sehen
netstat -an
Sie jetzt, dass Port 9051 geöffnet ist.Beachten Sie, dass erstellt
tor --service install -...
wirdTor Win32 Service
. Aus irgendeinem Grund müssen Sie den Dienst beenden, um den Browser zu verwenden (ausführenservices.msc
).EDIT: Sie viele Informationen finden Sie hier (Über Portnummer & Proxy, Tor, Privoxy, Autoschalter User - Agent ...).
quelle
Dieser Code funktioniert gut. Mit Tor wird die IP-Adresse nach jeder Anforderung geändert.
import time, socks, socket from urllib2 import urlopen from stem import Signal from stem.control import Controller nbrOfIpAddresses=3 with Controller.from_port(port = 9051) as controller: controller.authenticate(password = 'my_pwd') socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050) socket.socket = socks.socksocket for i in range(0, nbrOfIpAddresses): newIP=urlopen("http://icanhazip.com").read() print("NewIP Address: %s" % newIP) controller.signal(Signal.NEWNYM) if controller.is_newnym_available() == False: print("Waitting time for Tor to change IP: "+ str(controller.get_newnym_wait()) +" seconds") time.sleep(controller.get_newnym_wait()) controller.close()
quelle
nbrOfIpAddresses=3
macht. Erhält es zunächst eine Liste fester IP-Adressen?Das
requests
inrequesocks
ist super alt, es hat nichtresponse.json()
und viele andere Sachen.Ich möchte meinen Code sauber halten. Allerdings
requests
verfügt derzeit nicht über socks5 noch unterstützt (für weitere Informationen, lesen Sie diesen Thread https://github.com/kennethreitz/requests/pull/478 )Also habe ich
Privoxy
als http-Proxy verwendet, der Tor vorerst verbindet.Installieren und konfigurieren Sie Privoxy auf einem Mac
brew install privoxy vim /usr/local/etc/privoxy/config # put this line in the config forward-socks5 / localhost:9050 . privoxy /usr/local/etc/privoxy/config
Installieren und konfigurieren Sie Privoxy unter Ubuntu
sudo apt-get install privoxy sudo vim /etc/privoxy/config # put this line in the config forward-socks5 / localhost:9050 . sudo /etc/init.d/privoxy restart
Jetzt kann ich Tor wie einen http-Proxy verwenden. Unten ist mein Python-Skript.
import requests proxies = { 'http': 'http://127.0.0.1:8118', } print requests.get('http://httpbin.org/ip', proxies=proxies).text
quelle
privoxy /usr/local/etc/privoxy/config
gibt diesen Fehler zurück2016-08-06 23:47:01.761 00000048 Error: Wrong number of parameters for forward-socks5 in configuration file.
Eine gute Funktion, um Ihre IP zu erneuern. Windows Beispiel
def renew_tor_ip(): with Controller.from_port(port = 9051) as controller: controller.authenticate(password="aAjkaI19!!laksjd") controller.signal(Signal.NEWNYM)
Anwendungsbeispiel
import requests import time from stem import Signal from stem.control import Controller def get_current_ip(): session = requests.session() # TO Request URL with SOCKS over TOR session.proxies = {} session.proxies['http']='socks5h://localhost:9150' session.proxies['https']='socks5h://localhost:9150' try: r = session.get('http://httpbin.org/ip') except Exception as e: print(str(e)) else: return r.text #16:8EE7AEE3F32EEEEB605C6AA6C47B47808CA6A81FA0D76546ADC05F0F15 to aAjkaI19!!laksjd #cmd shell "C:\Users\Arthur\Desktop\Tor Browser\Browser\TorBrowser\Tor\tor.exe" --hash-password aAjkaI19!!laksjd | more #Torcc config #ControlPort 9051 #HashedControlPassword 16:8EE7AEE3F32EEEEB605C6AA6C47B47808CA6A81FA0D76546ADC05F0F15 def renew_tor_ip(): with Controller.from_port(port = 9051) as controller: controller.authenticate(password="aAjkaI19!!laksjd") controller.signal(Signal.NEWNYM) for i in range(5): print(get_current_ip()) renew_tor_ip() time.sleep(5)
quelle