использование tor в качестве SOCKS5 прокси с python urllib2 или механизировать
Моя цель - использовать PythonS механизировать с помощью SOCKS прокси.
Я не использую графический интерфейс со следующей версией Ubuntu: Описание: Ubuntu 12.04.1 LTS Release: 12.04 Кодовое имя: точный
Tor установлен и прослушивает порт 9050 согласно сканированию nmap:
Starting Nmap 5.21 ( http://nmap.org ) at 2013-01-22 00:50 UTC
Nmap scan report for localhost (127.0.0.1)
Host is up (0.000011s latency).
Not shown: 996 closed ports
PORT STATE SERVICE
22/tcp open ssh
80/tcp open http
3306/tcp open mysql
9050/tcp open tor-socks
Я также подумал, что разумно посмотреть, смогу ли я подключиться к порту 9050, который я могу:
telnet 127.0.0.1 9050
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
quit
Connection closed by foreign host.
У меня были большие надежды на предложение в этом посте заставить работать с urllib2:Как я могу использовать SOCKS 4/5 прокси с urllib2?
Поэтому я попробовал следующий скрипт на python:
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://icanhazip.com').read()
Сценарий просто зависает без ответа.
Я подумал, что поскольку механизация, по-видимому, связана с urllib2, следующий скрипт может работать:
import socks
import socket
import mechanize
from mechanize import Browser
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
br = Browser()
print br.open('http://icanhazip.com').read()
Я получаю тот же результат, что и выше, с помощью скрипта urllib2.
Я очень плохо знаком с python и сетями, поэтому мне нужно второе мнение о том, как заставить python urllib2 использовать tor в качестве SOCKS на сервере Ubuntu без графического интерфейса пользователя.
Я запустил этот скрипт и получил ожидаемый ответ. Я не использовал Tor прокси:
In [1]: import urllib2
In [2]: print urllib2.urlopen('http://icanhazip.com').read()
xxxx:xxxx:xxxx:512:13b2:ccd5:ff04:c5f4
Благодарю.
Я нашел то, что работает! Я понятия не имею, почему это работает, но это делает. Я нашел это здесь:Python urllib над TOR?
import socks
import socket
def create_connection(address, timeout=None, source_address=None):
sock = socks.socksocket()
sock.connect(address)
return sock
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
# patch the socket module
socket.socket = socks.socksocket
socket.create_connection = create_connection
import urllib2
print urllib2.urlopen('http://icanhazip.com').read()
import mechanize
from mechanize import Browser
br = Browser()
print br.open('http://icanhazip.com').read()