2015-02-21 28 views
5

Muszę potwierdzić, czy można użyć Trzonu do uruchomienia procesu Tora, który udostępnia 127.0.0.1:port, a następnie użyć go na skrypcie selenowym jako proxy (SOCKS).Selenium WebDriver + Tor jako proxy ze stemplem?

Używam Pythona 3.4.2, Trzonu 1.3.0 i Tora (tor-win32-tor-0.2.5.10 expert ) w systemie Windows.

Ten fragment kodu działa ze standardowym proxy SOCKS.

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') 

Ale nie mogę sprawić, by działała z Torem jako moim pełnomocnikiem. Próbowałem stworzyć proces Tora i jego stworzenie. Ale tak naprawdę nie wiem, czy to działa poprawnie. Nie pojawiają się błędy w moim 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', 
) 

Potem próbowałem dwa sposoby tworzenia połączenia lub uwierzytelniania. Pierwsza z nich używa with i stem.control.controller. A druga na niższym poziomie z stem.socket i stem.connection

Pierwszy:

# 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) 
''' 

Drugi:

# 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 
''' 

i zarówno prowadzony bez błędów ... Ale kiedy użyć kodu aby wywołać instancję przeglądarki Firefox WebDriver pod numerem 127.0.0.1:9000 jako proxy (również próbowano z 127.0.0.1:9051, ponieważ tak naprawdę nie znam różnicy między socksPort i controlPort) To nie działa.

Odpowiedz

0

Pytanie nie może utworzyć procesu tor, jest to tylko biblioteka do połączenia z istniejącym serwerem tor w celu inspekcji/sterowania za pośrednictwem portu sterowania.

Aby utworzyć sam proces, należy uruchomić system za pomocą upstart/launchctl/etc. Alternatywnie możesz po prostu wpisać tor z linii poleceń, jeśli jest zainstalowany i będzie działał na pierwszym planie.

Aby użyć łodygi, musisz zmienić swój torrc na. włączyć ControlPort, i b. ustaw metodę uwierzytelniania (cookieauth lub hashowane hasło przechowywane w Twoim pliku torrc). Domyślny tor SocksPort to 9050, a ControlPort to 9051.

SocksPort to ten, do którego kierujesz swój ruch (np. Firefox), do którego podłączasz system ControlPort. Pamiętaj o tym, tylko jeśli potrzebujesz nawet łodygi, ponieważ wygląda na to, że próbujesz uruchomić z nią instancję (i nie jest to możliwe), jeśli uruchomisz ją na swojej wanilii systemowej, to zadziała. z selenem/firefoxem, ponieważ masz to skonfigurowane (domyślny port to 9050, a nie 9000)

+1

Dzięki za wysiłek, ale to nie jest prawda. Pytanie ** CAN ** uruchamia proces i tworzy działającą instancję TOR. Możesz go utworzyć za pomocą 'stem.process.launch_tor_with_config()' w ten sposób nie potrzebujesz nawet pliku konfiguracyjnego, przekazujesz konfigurację do funkcji. Zrobiłem to w Linuksie, ale moje pytanie dotyczyło Windowsa. To, co powiedziałeś o portach, jest poprawne. Więcej: https://stem.torproject.org/api/process.html – Jeflopo