2015-02-21 28 views
5

Devo confermare Se è possibile utilizzare Stem per avviare un processo Tor che espone 127.0.0.1:port, quindi utilizzarlo su script di selenio come proxy (SOCKS).Selenium WebDriver + Tor come proxy con Stem?

Sto usando Python 3.4.2, Stem 1.3.0 e Tor (tor-win32-tor-0.2.5.10 expert bundle) su Windows.

Questo pezzo di codice funziona con un proxy SOCKS standard.

from selenium import webdriver 
from selenium.webdriver.firefox.firefox_profile import FirefoxProfile 

profile = FirefoxProfile() 
profile.set_preference('network.proxy.type', 1) 
profile.set_preference('network.proxy.socks', '127.0.0.1') 
profile.set_preference('network.proxy.socks_port', 9000) 

driver = webdriver.Firefox(profile) 
driver.implicitly_wait(30) 
driver.get('http://www.reddit.com') 

Ma non riesco a farlo funzionare con Tor come proxy. Ho provato a creare un processo Tor, e il suo creato. Ma non so davvero se funzioni correttamente. Non ottengo errori nel mio tor_error_log.txt

# File: stem_process.py 
import stem.process 
import stem 

stem.process.launch_tor_with_config(
    config = { 
    'SocksPort': '9000', 
    'ControlPort': '9051', 
    'ExitNodes': '{us}', 
    'Log': [ 
     'NOTICE stdout', 
     'ERR file c:\\tor-win32-tor-0.2.5.10\\Tor\\tor_error_log.txt', 
    ], 
    }, 
    tor_cmd = 'C:\\tor-win32-tor-0.2.5.10\\Tor\\tor.exe', 
) 

poi ho provato due modi per creare il collegamento o autenticare. Il primo utilizza with e stem.control.controller. E la seconda a livello inferiore con stem.socket e stem.connection

Il primo:

# File: stem_test1.py 
from stem.control import Controller 

with Controller.from_port(address='127.0.0.1', port=9051) as controller: #port = 9051 
    controller.authenticate() 

    print("Tor is running version %s" % controller.get_version()) 

''' 
# Output: 
Tor is running version 0.2.5.10 (git-13318a95ddfbbf8d) 
''' 

Il secondo:

# File: stem_test2.py 
import sys 
import stem 
import stem.connection 
import stem.socket 

if __name__ == '__main__': 
    try: 
    control_socket = stem.socket.ControlPort(port = 9051) 
    stem.connection.authenticate(control_socket) 
    except stem.SocketError as exc: 
    print('Unable to connect to tor on port 9051: %s' % exc) 
    sys.exit(1) 
    except stem.connection.AuthenticationFailure as exc: 
    print('Unable to authenticate: %s' % exc) 
    sys.exit(1) 

    print("Issuing 'GETINFO version' query...\n") 
    control_socket.send('GETINFO version') 
    print(control_socket.recv()) 

''' 
# Output: 
Issuing 'GETINFO version' query... 

version=0.2.5.10 (git-13318a95ddfbbf8d) 
OK 
''' 

Ed entrambi corsa senza errori ... Ma quando io uso il codice chiamare l'istanza di WebDriver di Firefox con 127.0.0.1:9000 come proxy (anche provato con 127.0.0.1:9051, perché non conosco la differenza tra socksPort e controlPort). Non funziona.

risposta

0

Lo stelo non può creare un processo tor, è solo una libreria per il collegamento a un server tor esistente per ispezione/controllo tramite la porta di controllo.

Per creare il processo Tor stesso, è necessario che il sistema lo avvii con upstart/launchctl/etc. In alternativa, puoi semplicemente digitare tor dalla riga di comando se è installato e verrà eseguito in primo piano.

Con questo, per utilizzare lo stem è necessario modificare il proprio torrc in a. abilitare la ControlPort e b. imposta un metodo di autenticazione (cookieauth o password hash memorizzata nel tuo torrc). Il valore predefinito di SocksPort è 9050 e ControlPort è 9051.

Il SocksPort è quello che instradi il tuo traffico (ad esempio firefox) attraverso, il ControlPort è ciò a cui ti connetti. Attenzione, solo se hai bisogno anche di stem, dato che sembra che stai provando ad avviare un'istanza Tor con esso (e questo non è fattibile), se lo fai funzionare sul tuo sistema vanilla, funzionerà con selenio/firefox come hai configurato (beh, la porta di default è 9050 non 9000)

+1

Grazie per lo sforzo, ma questo non è vero. Stem ** CAN ** avvia il processo e crea un'istanza TOR corrente. Puoi crearlo usando 'stem.process.launch_tor_with_config()' in questo modo non hai nemmeno bisogno di un file di configurazione, passi la configurazione alla funzione. L'ho fatto su Linux, ma la mia domanda era per Windows. Quello che hai detto sulle porte è corretto. Altro: https://stem.torproject.org/api/process.html – Jeflopo

Problemi correlati