użycie tor jako proxy SOCKS5 z python urllib2 lub mechanize
Moim celem jest użycie mechanizacji Pythona z proxy SOCKS tor.
Nie używam GUI z następującą wersją Ubuntu: Opis: Ubuntu 12.04.1 LTS Wydanie: 12.04 Nazwa kodowa: precyzyjna
Tor jest zainstalowany i nasłuchuje na porcie 9050 zgodnie ze skanowaniem 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
Uznałem też za rozsądne sprawdzić, czy mogę telnetować się do portu 9050, co mogę:
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.
Miałem duże nadzieje na sugestię zawartą w tym poście, aby móc pracować z urllib2:Jak mogę użyć proxy SOCKS 4/5 z urllib2?
Próbowałem więc następującego skryptu w 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()
Skrypt po prostu zawiesza się bez odpowiedzi.
Pomyślałem, że skoro mechanizacja wydaje się być powiązana z urllib2, następujący skrypt może działać:
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()
Otrzymuję taki sam wynik jak powyżej za pomocą skryptu urllib2.
Jestem bardzo nowy w pythonie i sieci, więc potrzebuję drugiej opinii, jak sprawić, by python urllib2 używał tor jako SOCKS na serwerze Ubuntu nie będącym GUI.
Uruchomiłem ten skrypt i otrzymałem oczekiwaną odpowiedź. Nie korzystałem z proxy tor:
In [1]: import urllib2
In [2]: print urllib2.urlopen('http://icanhazip.com').read()
xxxx:xxxx:xxxx:512:13b2:ccd5:ff04:c5f4
Dzięki.
Znalazłem coś, co działa! Nie mam pojęcia, dlaczego to działa, ale tak jest. Znalazłem to tutaj:Python urllib nad 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()