6 Stimmen

Schwierigkeiten bei der Authentifizierung von Tor mit Python

Vielleicht mache ich hier etwas sehr Dummes, aber ich habe Schwierigkeiten, mich automatisch über Tor zu authentifizieren.

Ich verwende 32-Bit-Ubuntu 12.04 mit verschlüsselten Brücken.

Dies sollte der relevante Code sein, aber lassen Sie mich wissen, ob es noch etwas gibt, das beim Debuggen dieses Problems nützlich wäre:

import socket
import socks
import httplib

def connectTor():
    socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050, True)
    #9050 ist der Tor-Proxy-Port
    socket.socket = socks.socksocket

def newIdentity():
    socks.setdefaultproxy() #Trennen Sie sich vom Tor-Netzwerk

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.connect(("127.0.0.1", 46594))

s.send("AUTHENTICATE\r\n")

response = s.recv(128)
#128 Bytes Daten für den Moment, nur um zu sehen, wie Tor antwortet

print response
if response.startswith("250"): #250 ist der Code für eine positive Antwort von Tor
    s.send("SIGNAL NEWNYM\r\n") #Verwenden Sie eine neue Identität
s.close()

connectTor() #Nur um sicherzustellen, dass wir immer noch mit Tor verbunden sind

Immer wenn ich das ausführe, erhalte ich den folgenden Fehler:

515 Authentifizierung fehlgeschlagen: Das Passwort stimmt nicht mit dem HashedControlPassword-Wert aus der Konfiguration überein. Vielleicht haben Sie ein Klartextpasswort versucht

Ich habe versucht, die Option --hash-password zu verwenden und diesen anstelle des AUTHENTICATE-Strings einzufügen, aber das hat dazu geführt, dass das Skript hängen blieb. Gedanken?

6voto

Damian Punkte 2896

Dieser Fehler bedeutet, dass Sie die HashedControlPassword-Option in Ihrer Torrc festgelegt haben. Ich würde vorschlagen, stattdessen die Option CookieAuthentication 1 zu verwenden und dann eine Controller-Bibliothek zu verwenden, anstatt dies von Grund auf neu zu machen.

Was Sie hier versuchen zu tun (einen NEWNYM-Befehl auszugeben) ist eine sehr häufige Anfrage (1, 2), deshalb habe ich eine FAQ-Antwort dazu hinzugefügt. Hier ist ein Beispiel, das stem verwendet...

from stem import Signal
from stem.control import Controller

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

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X