it-swarm.com.de

Wie ändert man die Tor-Identität in Python?

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?

22
user873286

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
20
user873286

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.

26
OrangeTux

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)))
13
nedim

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.

3
Edgar

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)

Sie können das Tutorial hier lesen.

0
shicky