Buenas a todos, en el post de hoy daremos inicio a una cadena en la que veremos como automatizar con python tanto la auditoría web de una página alojada en la red TOR, como la auditoría de páginas "anonimizando" la comunicación, si se puede seguir llamando anónimo.... ;)
En el primer artículo de la cadena analizaremos como navegar desde python por TOR, utilizando como proxy el navegador Tor Browser:
La idea es muy sencilla, en primer lugar utilizaremos la librería socks para canalizar la comunicación de nuestro script por el puerto 9050, por el que tendremos escuchando Tor, levantado por el Tor Browser, y a continuación realizaremos una operación sencilla, como es la extracción de los enlaces alojados en una página web.
A continuación os dejamos con el código del script:
#! /usr/bin/env pythonPara ejecutarlo basta con llamar al programa "tor.py" pasándole con el parámetro -u la URL TOR que queremos auditar:
import urllib2, sys, re, urlparse, datetime, optparse, os, socks, socket
#Funcion proxy TOR
def create_connection(address, timeout=None, source_address=None):
sock = socks.socksocket()
sock.connect(address)
return sock
#Funcion que recupera todos los enlaces de una pagina
def getLinks(page):
links = []
try:
#Recuperamos el codigo de la pagina
f = urllib2.urlopen(page)
code = f.read()
f.close()
#Recuperamos los enlaces
urls = re.finditer('href="(.*?)[\'"]', code)
for url in urls:
links.append(url.group(0).replace("'", '').replace('"', "").replace('href=', ""))
return links
except HTTPError, e:
print "Ocurrio un error"
print e.code
except URLError, e:
print "Ocurrio un error"
print e.reason
if __name__ == '__main__':
parser = optparse.OptionParser('usage %prog -u <url>')
parser.add_option('-u', dest='url', type='string', help='url')
(options, args) = parser.parse_args()
url = options.url
#Lanzamos proxy TOR
socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, "127.0.0.1", 9050)
socket.socket = socks.socksocket
socket.create_connection = create_connection
#Procesamos la pagina
for link in getLinks(url):
print link
Saludos!