utilizando tor como proxy SOCKS5 con python urllib2 o mecanizar
Mi objetivo es utilizar mecanizar python con un proxy SOCKS.
No estoy usando una GUI con la siguiente versión de Ubuntu: Descripción: Ubuntu 12.04.1 LTS Release: 12.04 Nombre en código: preciso
Tor está instalado y está escuchando en el puerto 9050 de acuerdo con el escaneo de 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
También pensé que sería razonable ver si podía hacer telnet al puerto 9050, lo que puedo:
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.
Tenía muchas esperanzas en la sugerencia de este post para poder trabajar con urllib2:¿Cómo puedo usar un proxy SOCKS 4/5 con urllib2?
Así que probé el siguiente script en 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()
El script simplemente se cuelga sin respuesta.
Pensé que, dado que mecanizar parece estar relacionado con urllib2, el siguiente script podría 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()
Obtuve el mismo resultado que el anterior con el script urllib2.
Soy muy nuevo en python y en redes, por lo que necesito una segunda opinión sobre cómo hacer que python urllib2 se utilice como SOCKS en un servidor Ubuntu que no sea GUI.
Ejecuté este script y recibí una respuesta esperada. No usé el proxy de tor:
In [1]: import urllib2
In [2]: print urllib2.urlopen('http://icanhazip.com').read()
xxxx:xxxx:xxxx:512:13b2:ccd5:ff04:c5f4
Gracias.
¡Encontré algo que funciona! No tengo idea de por qué funciona, pero lo hace. Lo encontré aquí: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()