Cómo crear scripts en Python que utilicen la red de TOR: Parte 1 de 2
2022-9-14 15:0:8 Author: thehackerway.com(查看原文) 阅读量:21 收藏

Demostración en vídeo de este post:

La red de TOR es ampliamente difundida y permite evadir restricciones de acceso a redes o sitios censurados, así como navegar de forma anónima por la darknet o clearnet. Por otro lado, en ocasiones es necesario automatizar algunas actividades, ya sea para realizar labores de pentesting, spidering, scrapping, etc. Si por el motivo que sea, estas actividades se deben llevar a cabo de forma anónima, resulta conveniente saber qué alternativas tenemos disponibles para realizar conexiones de red desde Python pasando por el servicio SOCKS que levanta cualquier instancia de TOR. En éste y el siguiente post, se enseñaré algunas librerías disponibles para esto y los beneficios que aportan.

Requests es probablemente la librería más conocida entre aquellos desarrolladores que necesitan utilizar Python para ejecutar peticiones HTTP. Destaca por su versatilidad y facilidad de uso, con muy pocas instrucciones se pueden crear clientes HTTP completos para hacer cosas tan simples (o complejas) como ejecutar procesos de análisis de peticiones y respuestas o consumir de forma programática una API Rest. No obstante, si lo que se pretende es que las peticiones HTTP que realiza Requests pasen por TOR sin exponer la identidad real del cliente (dirección IP), es necesario indicarle a la librería la configuración del proxy SOCKS. Como prácticamente todo en Requests, configurar un proxy SOCKS no es complicado, basta simplemente con pasarle un diccionario con los detalles necesarios.

Como se puede apreciar en la imagen anterior, con muy pocas líneas de código se puede establecer una conexión a un sitio web en Internet utilizando una instancia de TOR en ejecución. Solamente hay que tener en cuenta que en este caso el proxy SOCKS se encuentra en levantado en el puerto 9150, ya que éste puerto es el valor por defecto de TorBrowser. A la hora de realizar la petición HTTP solamente es necesario tener en cuenta que se debe enviar el parámetro «proxies» con el diccionario declarado previamente. Este parámetro se encuentra definido en todas las funciones del módulo «requests» para hacer peticiones HTTP, tales como «get», «post», «put», «delete», etc.

Ahora bien, cuando se utiliza Requests la cabecera «User-Agent» de la petición no corresponde a la de cualquier navegador web de uso común, con lo que es fácilmente identificable que la petición HTTP se está llevando a cabo desde un script o bot. Para evitar esta situación, es habitual utilizar una librería como fake_useragent, la cual se encuentra disponible en el PYPI y se puede instalar con «pip install fake_useragent«.

En los párrafos anteriores se asumía que ya estaba levantada la instancia de TOR, en este caso concreto utilizando TorBrowser, sin embargo es probable que se quiera levantar una instancia de TOR aislada sin el navegador web de TorBrowser, es decir, solamente el programa de TOR y su proxy SOCKS sin más componentes añadidos. En este caso, es recomendable utilizar una librería como TxTorCon o Stem, en cualquiera de estas librerías se iniciará una instancia de TOR con la configuración que se le quiera pasar. El proceso es muy sencillo y puede venir bien cuando sea necesario ejecutar la instancia de TOR y el script de Python en un sistema que no cuente con un entorno gráfico (como un servidor basado en Unix). Eso sí, es necesario instalar la instancia de TOR manualmente.

Como se puede ver en la imagen anterior, se levanta una instancia de TOR que previamente ha sido descargada y compilada desde torproject.org y a continuación, se le envía un diccionario con la configuración que deberá utilizarse. Se envía una función de callback como parámetro de la función «launch_tor_with_config» para ver todos los eventos producidos y a partir de este punto, se podrían ejecutar peticiones con Requests tal como se ha explicado previamente, lo único que habría que cambiar es el puerto donde se ha iniciado la instancia de TOR que en este caso, se encuentra definido en el script.

Si bien en este post se ha visto cómo realizar peticiones HTTP con Requests utilizando TOR, existe una alternativa que permite gestionar mucho mejor las peticiones y evitar los «DNS Leaks», concretamente usando el objeto «Session» de Requests, algo que explicaré en el siguiente post. Espero que éste te haya gustado y si ese es el caso, puedes dejar un comentario y compartirlo con tus amigos o colegas.

Un saludo y Happy Hack!
Adastra.


文章来源: https://thehackerway.com/2022/09/14/como-crear-scripts-en-python-que-utilicen-la-red-de-tor-parte-1-de-2/
如有侵权请联系:admin#unsafe.sh