usando tor como um proxy SOCKS5 com python urllib2 ou mecanizar
Meu objetivo é usar o mecanismo do python com um proxy SOCKS do tor.
Eu não estou usando uma GUI com a seguinte versão do Ubuntu: Descrição: Ubuntu 12.04.1 LTS Release: 12.04 Codename: precise
O Tor está instalado e escutando na porta 9050 de acordo com a varredura do 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
Eu também achei razoável para ver se eu poderia telnet para a porta 9050, que eu posso:
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.
Eu tinha grandes esperanças para a sugestão neste post para começar a trabalhar com o urllib2:Como posso usar um proxy SOCKS 4/5 com urllib2?
Então eu tentei o seguinte script em 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()
O script apenas trava sem resposta.
Eu pensei que desde mechanize parece estar relacionado ao urllib2 que o seguinte script pode funcionar:
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()
Eu recebo o mesmo resultado acima com o script urllib2.
Eu sou muito novo em python e networking, então eu preciso de uma segunda opinião sobre como fazer o uso do urllib2 python como um SOCKS em um servidor Ubuntu não-GUI.
Eu corri este script e recebi uma resposta esperada. Eu não usei o proxy tor:
In [1]: import urllib2
In [2]: print urllib2.urlopen('http://icanhazip.com').read()
xxxx:xxxx:xxxx:512:13b2:ccd5:ff04:c5f4
Obrigado.
Eu encontrei algo que funciona! Eu não tenho ideia do porque funciona, mas funciona. Eu encontrei aqui:Python urllib sobre 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()