2015-02-21 21 views
5

Tôi cần phải xác nhận Nếu Stem có thể được sử dụng để khởi chạy một quá trình Tor hiển thị 127.0.0.1:port, sau đó sử dụng nó trên các kịch bản selenium làm proxy (SOCKS).Selenium WebDriver + Tor là proxy với gốc?

Tôi đang sử dụng Python 3.4.2, Gốc 1.3.0 và Tor (tor-win32-tor-0.2.5.10 chuyên gia gói) trên Windows.

Đoạn mã này hoạt động với proxy SOCKS chuẩn.

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

Nhưng tôi không thể quản lý nó làm việc với Tor làm proxy của mình. Tôi đã cố gắng tạo ra một quá trình Tor, và nó được tạo ra. Nhưng tôi không thực sự biết nếu nó hoạt động đúng. Tôi không gặp lỗi trong số 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', 
) 

Sau đó, tôi đã thử hai cách để tạo kết nối hoặc xác thực. Mục đầu tiên là sử dụng withstem.control.controller. Và thứ hai ở mức thấp với stem.socketstem.connection

Thứ nhất:

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

Thứ hai:

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

và cả hai chạy mà không có lỗi ... Nhưng khi tôi sử dụng mã để gọi phiên bản Firefox WebDriver với 127.0.0.1:9000 làm proxy (cũng đã thử với 127.0.0.1:9051, vì tôi không thực sự biết sự khác biệt giữa socksPortcontrolPort) Nó không hoạt động.

Trả lời

0

Gốc không thể tạo ra một quá trình tor, nó chỉ là một thư viện để kết nối với một máy chủ tor hiện có để kiểm tra/kiểm soát thông qua cổng điều khiển.

Để tạo quy trình tor, bạn cần phải khởi động hệ thống của mình bằng cách khởi động/launchctl/v.v. Ngoài ra, bạn có thể chỉ cần nhập tor từ dòng lệnh nếu được cài đặt và nó sẽ chạy ở nền trước.

Với điều đó, để sử dụng thân cây, bạn cần chỉnh sửa torrc của mình thành a. kích hoạt ControlPort và b. thiết lập một phương thức xác thực (cookieauth hoặc mật khẩu băm được lưu trữ trong torrc của bạn). Các mặc định tor SocksPort là 9050 và ControlPort là 9051.

SocksPort là một trong những bạn định tuyến lưu lượng truy cập của bạn (tức là firefox) thông qua, ControlPort là những gì bạn kết nối bắt nguồn từ. Hãy nhớ bạn, chỉ khi bạn cần thân cây, vì có vẻ như bạn đang cố gắng bắt đầu một ví dụ với nó (và điều đó không thể thực hiện được), nếu bạn chạy nó trên vanilla hệ thống của bạn, nó sẽ hoạt động với selenium/firefox như bạn đã có nó cấu hình (tốt, cổng mặc định là 9050 không 9000)

+1

Cảm ơn bạn đã nỗ lực nhưng điều này là không đúng sự thật. Gốc ** CÓ THỂ ** khởi chạy tiến trình, và tạo ra một TOR instance đang chạy. Bạn có thể tạo nó bằng cách sử dụng 'stem.process.launch_tor_with_config()' bằng cách này bạn thậm chí không cần một tệp cấu hình, bạn chuyển cấu hình cho hàm. Tôi đã làm điều đó trong Linux, nhưng câu hỏi của tôi là dành cho Windows. Những gì bạn nói về các cổng là chính xác. Thêm: https://stem.torproject.org/api/process.html – Jeflopo

Các vấn đề liên quan