networking ubuntu urllib2 mechanize tor

networking - utilizando tor como un proxy SOCKS5 con python urllib2 o mecanizar



ubuntu mechanize (2)

Ver el final de la pregunta.

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

Mi objetivo es usar el mecanizado de Python con un proxy tor SOCKS.

No estoy usando una GUI con la siguiente versión de Ubuntu: Descripción: Ubuntu 12.04.1 LTS Versión: 12.04 Nombre codificado: preciso

Tor está instalado y está escuchando en el puerto 9050 de acuerdo con el escaneo 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 era razonable ver si podía usar telnet en el puerto 9050, lo cual 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 esta publicación para empezar a 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()

La secuencia de comandos simplemente se bloquea sin respuesta.

Pensé que dado que mechanize parece estar relacionado con urllib2, podría funcionar la siguiente secuencia de comandos:

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

Obtengo el mismo resultado que el anterior con el script urllib2.

Soy muy nuevo en python y redes, así que necesito una segunda opinión sobre cómo hacer que el uso de python urllib2 sea como SOCKS en un servidor Ubuntu no GUI.

Ejecuté este script y recibí una respuesta esperada. No usé el proxy 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()


La solución anterior no funcionó para mí. Estoy en Ubuntu 14.04. Cada vez que intento ejecutar el script anterior, sigue arrojando el siguiente error.

Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/lib/python2.7/urllib2.py", line 127, in urlopen return _opener.open(url, data, timeout) File "/usr/lib/python2.7/urllib2.py", line 404, in open response = self._open(req, data) File "/usr/lib/python2.7/urllib2.py", line 422, in _open ''_open'', req) File "/usr/lib/python2.7/urllib2.py", line 382, in _call_chain result = func(*args) File "/usr/lib/python2.7/urllib2.py", line 1214, in http_open return self.do_open(httplib.HTTPConnection, req) File "/usr/lib/python2.7/urllib2.py", line 1184, in do_open raise URLError(err) urllib2.URLError: <urlopen error ((1, ''general SOCKS server failure''),)>

Comprobó si tor se está ejecutando utilizando el comando nmap.

Nmap scan report for localhost (127.0.0.1) Host is up (0.00026s latency). Not shown: 993 closed ports PORT STATE SERVICE 22/tcp open ssh 139/tcp open netbios-ssn 445/tcp open microsoft-ds 631/tcp open ipp 902/tcp open iss-realsecure 3306/tcp open mysql 9050/tcp open tor-socks

La instalación de Vidalia resolvió este problema. Aparentemente, el proxy socks no permitía que la conexión pasara por él. Espero que esto ayude a alguien a enfrentar el mismo problema.