sábado, 22 de septiembre de 2018

Cambiar de proxy automáticamente cada pocos minutos.


Aquí os dejo un pequeño Script con el que podéis navegar mediante proxy y que el mismo cambie cada pocos minutos de manera automática mientras navegamos con equipos Windows.
Imagina navegar durante una hora por una web y haber elegido un cambio de proxy cada 30 segundos, en los logs de la web, habrá listadas 120 conexiones de 120 direcciones IP distintas, cuando en realidad toda la navegación la ha hecho un solo individuo desde una sola dirección IP. Esto puede serle útil a ciertas personas para testeo de sus sitios, etc.


Lo primero que debemos hacer es crear un archivo de texto con una lista de proxys y puertos que queramos usar, de esta manera:

138.197.21.105:8080
138.197.32.85:8080
138.201.186.128:80
154.16.127.141:8080
154.16.127.152:8080
173.255.98.158:8080
177.54.144.170:8080
178.22.148.122:3129
178.33.42.158:3128

y guardamos el archivo como proxys.txt (que es como lo llamamos desde el script).
Las direcciones mostradas arriba son de proxys listados en la web https://es.proxyservers.pro/proxy/list/anonymity/anonymous por lo que es conveniente no usar los arriba especificados ya que suelen cambiar con frecuencia y lo más probable es que dichas direcciones ya no existan o no funcionen. Existen cientos de webs dedicadas a publicar listados de proxys anónimos como esta, tan solo hay que usar cualquier buscador para encontrarlas.

Lo siguiente es el Script que realiza el proceso, aquí os dejo el código (como siempre lo subo en lenguaje Autoit), viendo el fuente podéis extrapolarlo o readaptarlo a cualquier otro que sea de vuestro agrado, Python, C#, Java, etc.

; Script que nos permite navegar a través de proxy y cambiarlo automáticamente según lista dada y el tiempo que hayamos indicado.
; Añadimos los includes necesarios.
#include <StaticConstants.au3>
#include <InetConstants.au3>
#include <WinAPIFiles.au3>
#include <Array.au3>

#include <File.au3>
#include <Timers.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

; Creamos el interface grafico...
$Form1 = GUICreate("Proxy Changer", 294, 138, 329, 199) ; Creamos la ventana o formulario, le damos un titulo, tamaño y posición de aparición en el Escritorio.
GUISetBkColor(0xD4D0C8) ; Color por defecto del fondo de la ventana.
$ButtonStart = GUICtrlCreateButton("Start Proxy Changer", 16, 24, 123, 57) ; Creamos un botón para iniciar el proceso.
$ButtonStop = GUICtrlCreateButton("Stop", 152, 24, 123, 57) ; Creamos otro botón para detener el proceso.
$Label1 = GUICtrlCreateLabel("Time for Proxy (in minutes, default 5 min.) ", 24, 104, 199, 17) ; Texto explicativo del input de tiempo.
$sTiempo = GUICtrlCreateInput("", 232, 96, 49, 21) ; Creamos el campo para introducir el tiempo.
GUISetState(@SW_SHOW) ; Mostramos la ventana/formulario al usuario.


local $milisegundos ; Tiempo de uso en minutos de cada proxy, por defecto son 5 minutos (el manejo es en milisegundos).
If GuiCtrlRead($sTiempo) == "" Then ; Si el campo de tiempo esta vacío, usamos el valor por defecto.
 $milisegundos = 300000 ; esto son 5 minutos en milisegundos.
Else ; Si no lo esta, usamos el valor introducido, asegurando antes que sea un valor numérico.
 $milisegundos = Number(GuiCtrlRead($sTiempo)) *60000 ; pasamos a milisegundos lo introducido en el campo $sTiempo.
EndIf

local $hFile = Fileopen("proxys.txt") ; abrimos el archivo txt en el que hemos listado los proxies que queremos utilizar.
Global $aRetArray, $sFilePath = "proxys.txt"
_FileReadToArray($sFilePath, $aRetArray) ; cargamos la lista en un array.
FileClose($hFile) ; cerramos el archivo de texto.

While 1
 $nMsg = GUIGetMsg()
 Switch $nMsg
   Case $GUI_EVENT_CLOSE
   _desactiva_proxy() ; Si cerramos la ventana, detenemos el proceso y desactivamos el uso de proxy.
   Exit ; Finalizamos el Script y cerramos la ventana.
   Case $ButtonStart
   _activa_proxy($milisegundos) ; Si pulsamos el botón de inicio, empezamos a usar el proceso.
   Case $ButtonStop
   _desactiva_proxy() ; Si pulsamos el botón de Stop, detenemos el proceso y desactivamos el uso de proxy.
 EndSwitch
 WEnd

Func _activa_proxy($tiempo) ; Esta función activa el uso de proxy en Windows y comienza a usar los proxys listados en bucle.
 GUISetBkColor(0xFF0000) ; Cambiamos el color de fondo a rojo para avisar de que el proceso esta en marcha.
 RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable",  "REG_DWORD", 1) ; Activamos el uso de proxy en Windows
 For $b = 1 To $aRetArray[0] Step 1 ; activamos el primer proxy, lo usamos 5 minutos y cargamos el siguiente hasta terminar la lista.
  RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyServer", "REG_SZ", $aRetArray[$b]) ; indicamos a Windows la IP y el Puerto del proxy a usar.
  $iTimerProgress = _Timer_SetTimer($Form1, $tiempo, "_activa_proxy") ; Nos quedamos esperando a que pase el tiempo indicado de uso (por defecto 5 minutos).
 Next
  _activa_proxy($tiempo) ; repetimos la lista desde el principio.
EndFunc

Func _desactiva_proxy() ; Esta función desactiva el uso de proxy.
GUISetBkColor(0xD4D0C8) ; Devolvemos el color de la ventana a su estado normal para avisar de que el proceso esta detenido.
 RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyEnable",  "REG_DWORD", 0) ; Desactivamos el uso de proxy en Windows
 RegWrite("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings", "ProxyServer", "REG_SZ", "") ; Borramos los datos del ultimo proxy usado.
EndFunc


Y con esto ya está listo nuestro programilla de cambio de Proxy automático. Si al ejecutar, el Timer provoca un parpadeo continuo de la ventana, podemos sustituir la línea $iTimerProgress = _Timer_SetTimer($Form1, $tiempo, "_activa_proxy") por la línea Sleep($tiempo)

El código del Script está sin control de errores y no contempla una salida del bucle sin que haya terminado el mismo, pero por falta de tiempo no lo voy a poner ahora, podéis añadirlo si lo vais a usar fácilmente, o podéis contactarme y os contestaré en cuanto disponga de unos minutos. Así es la vida, a penas tengo tiempo de respirar...

No hay comentarios:

Publicar un comentario