• Publicidad

Utilizar diferentes proxies o IP

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Utilizar diferentes proxies o IP

Notapor jimr1984 » 2014-09-22 14:46 @657

Saludos, estimados.

Tengo una duda o consulta. El siguiente escenario,
tengo un script en localhost de prueba,
el cual permite mostrar un mensaje al presionar un botón.

Limitaciones: cuando es presionado el botón YA NO PERMITE volver a mostrar ningún mensaje,
salvo que la petición se genere desde otra IP.

¿Cómo podría hacer para utilizar varias IP o un proxy anónimo que me dé diferentes IP en cada GET?
Alguna idea o sugerencia, al respecto.

#! /usr/bin/perl

use strict;
use LWP::UserAgent;
use HTTP::Request;
use HTTP::Response;

my $ua = LWP::UserAgent->new;
my $sta = HTTP::Response->new();
$ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");

my $url = "http://localhost/Prueba.php?boton=mensaje";


my $req = HTTP::Request->new(GET => $url);
my $response = $ua->request($req);
my $content = $response->content();


print $response->code();

El limitante se encuentra en mi script en PHP pero si pudiera generar peticiones con diferentes IP desde Perl.
Algo así:

my $ua = LWP::UserAgent->new;
$ua->proxy('http','http://usuario:contraseña@proxyramdomico:8080');

o no sé, alguna sugerencia.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Publicidad

Re: Utilizar diferentes proxies o IP

Notapor explorer » 2014-09-22 16:33 @731

La dirección IP la ofrece el sistema de red del sistema informático en donde estés, así que tienes que pedir al sistema que cambie su IP.

Eso se puede hacer si eres el administrador del sistema.

Por ejemplo, en Linux, el administrador/sistema ejecuta el comando ifconfig para des/asignar una IP al hardware de red del sistema.

El problema es que al hacerlo, las conexiones externas se rompen, hasta que el sistema local se vuelve a conectar al exterior para informar a los enrutadores de la nueva IP.

Esto último se puede solventar si creas conexiones ethernet virtuales, asociadas a las del hardware. Así, el sistema tiene su propia IP, y en la virtual puedes asignarle cualquier otra (siempre y cuando estén en la misma red, claro).

De esta manera, cambias la IP, pero... lo que quieres es que luego, la petición, salga por esa IP... así que también debes actualizar las rutas, para que la petición salga con esa IP como origen de la petición.

Con proxy... ahora no caigo cómo se puede hacer.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Utilizar diferentes proxies o IP

Notapor jimr1984 » 2014-09-22 16:38 @735

Estoy probando este ejemplo: http://compgroups.net/comp.lang.perl.mi ... ctor/54622
pero no logro hacerlo funcionar. Lo que trato de hacer es que mi script se conecte a un proxy y luego realice el GET.

En la página http://www.multiproxy.org/txt_anon/proxy.txt hay una lista de varios proxy junto con sus puertos.
El script en si debe conectarse a cualquier proxy y luego realizar el GET.

Ejemplo:
#!/usr/bin/perl

use strict;
use warnings;
use HTTP::ProxySelector;
use LWP::UserAgent;

my $selector = HTTP::ProxySelector->new(sites
=>['http://www.multiproxy.org/txt_anon/proxy.txt'],
testflag => 1,
num_tries => 10,
testsite => 'http://yahoo.com');
my $ua = LWP::UserAgent->new();
$selector->set_proxy($ua);
print 'Selected proxy: ',$selector->get_proxy(),"\n";

my $url = "http://yahoo.com";

my $response = $ua->get($url) or die $!;
my $content = $response->content() or die $!;

print "$content\n";
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Utilizar diferentes proxies o IP

Notapor explorer » 2014-09-23 12:54 @579

A mi el programa sí que me funciona, pero el problema no está en él, sino en el propio listado de proxies: la mayor parte de ellos están desactivados (esa página no ha cambiado desde el 2009).

He localizado otro listado de proxies anónimos, los he metido en una lista, y lo he subido a mi dominio. Luego he modificado el programa para HTTP::ProxySelector los baje de ahí.

El resultado es que algunos fallaban y otros funcionaban. Además, tuve que modificar el propio módulo ProxySelector.pm para que admitiera ese listado:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.                 my @proxy_list = $response->content() =~ /^([\w\.\-]{7,}(:\d{1,5})?)/msg;
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Lo que hice fue poner como opcional la presencia del número de puerto.

Para aumentar el éxito, agregué el falseamiento de la cadena de nombre de agente y un timeout, para no tener que esperar tanto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use HTTP::ProxySelector;
  5. use LWP::UserAgent;
  6.  
  7. my $selector = HTTP::ProxySelector->new(
  8.     sites     => ['http://www.midominio.com/proxies.txt'],
  9.     testflag  => 1,
  10.     num_tries => 50,
  11.     testsite  => 'http://www.midominio.com'
  12. );
  13.  
  14. my $ua = LWP::UserAgent->new(
  15.     agent       => 'Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)',
  16.     timeout     => 10,
  17. );
  18.  
  19. $selector->set_proxy($ua);
  20. print 'Selected proxy: ', $selector->get_proxy(), "\n";
  21.  
  22. my $url = "http://www.midominio.com";
  23. my $response = $ua->get($url)       or die $!;
  24. my $content  = $response->content() or die $!;
  25.  
  26. print length $content;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Utilizar diferentes proxies o IP

Notapor jimr1984 » 2014-09-23 16:13 @717

Para poder reproducir lo que ud. hizo, tengo que hacer las mismas modificaciones. En tal caso, ¿en el archivo ".pm" de HTTP::ProxySelector?

¿Y qué modificaciones debería realizar?

No me quedó del todo claro las modificaciones que ud. realizó.

Respecto al funcionamiento, sí, esa parte me quedó muy claro,
y los proxies que ud. encontró también.

Yo opté por hacer algo así:

Me conseguí una lista de proxies ya testados,
los guardé en un arreglo, un total de 30 proxies:

$link = "http://www.google.com.bo";
my @listado_proxy = ("192.152.52.2:80","xxxx","yyyy","zzzzz","ect");
my $rmd = int(rand(30));
my $ua = LWP::UserAgent->new;
$ua->proxy('http','http://'.$listado_proxy[$rmd]);
$ua->agent("aqui detallo el agente ");
my $req = HTTP::Request->new(GET => $link);
...
...
..
print $response->code(); # 200 o 440 o 500

Hasta aquí, todo bien. El problema está en que a veces se conecta con un proxy QUE YA NO ESTÁ ACTIVO. ¿Cómo puedo hacer para que salte a otro proxy automáticamente? ¿Ud. utilizó un timeout? ¿Me podría explicar un poco más sobre ello? Gracias.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Utilizar diferentes proxies o IP

Notapor explorer » 2014-09-23 17:15 @760

jimr1984 escribiste:Para poder reproducir lo que ud. hizo, tengo que hacer las mismas modificaciones. En tal caso, ¿en el archivo ".pm" de HTTP::ProxySelector?
No tienes que modificar nada si cuentas con una lista de proxies que realmente funcionen.

jimr1984 escribiste:¿Y qué modificaciones debería realizar?
Abrir el archivo ProxySelector.pm y cambiar la línea 59 como se ha indicado antes.

jimr1984 escribiste:Me conseguí una lista de proxies ya testados,
los guardé en un arreglo, un total de 30 proxies:

$link = "http://www.google.com.bo";
my @listado_proxy = ("192.152.52.2:80","xxxx","yyyy","zzzzz","ect");
my $rmd = int(rand(30));
my $ua = LWP::UserAgent->new;
$ua->proxy('http','http://'.$listado_proxy[$rmd]);
$ua->agent("aqui detallo el agente ");
my $req = HTTP::Request->new(GET => $link);
...
...
..
print $response->code(); # 200 o 440 o 500

Hasta aquí, todo bien. El problema está en que a veces se conecta con un proxy QUE YA NO ESTÁ ACTIVO.
Todas esas líneas es lo que hace internamente HTTP::ProxySelector: de un URL se baja una lista de proxies. Luego intentará el número de veces indicado elegir uno de ellos al azar y ver si a través de él se puede conectar al sitio de prueba. Si puede hacerlo, saldrá inmediatamente porque habrá encontrado uno que funciona.

El problema es que los proxies listados devuelven éxito al módulo, pero cuando le vas a solicitar que te traiga una determinada página, pues no lo hacen.

Lo más probable es que los sitios web destino estén bloqueando el acceso de esos proxies. Yo, desde luego, lo haría (no me gustaría que accedieran a los sitios web de mis clientes de forma anónima).

En el ejemplo de prueba, se intenta bajar la página oficial de yahoo.com. Lo he intentado más de 20 veces, y sólo ha funcionado 2.

jimr1984 escribiste:¿Cómo puedo hacer para que salte a otro proxy automáticamente? ¿Ud. utilizó un timeout? ¿Me podría explicar un poco más sobre ello?
HTTP::ProxySelector hace justamente eso: salta al siguiente proxy si no obtuvo respuesta. El problema es lo comentado antes: que luego no funcionan bien.

El timeout es una de las opciones que se pasan a LWP::UserAgent para decirle el máximo de tiempo que deben durar los intentos de conexión. Eso incluye las pruebas de conexión de HTTP::ProxySelector, ya que utiliza el objeto LWP::UserAgent creado en el programa ($ua).

La posible solución sería meter el programa dentro de otro bucle que obligase a escoger otro proxy si el seleccionado por HTTP::ProxySelector no funciona bien (la función get() de LWP::UserAgent no devuelve éxito).

Te aconsejo que estudies el código de HTTP::ProxySelector. No es muy largo, y se entiende bien. Ahí puedes ver cómo usa eval() para capturar los errores de conexión y probar el siguiente proxy.

Esto, de todas maneras, no garantiza que funcione con la web que quieres obtener. Muchas webs cuentan con sistemas de protección para este tipo de accesos.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Utilizar diferentes proxies o IP

Notapor jimr1984 » 2014-09-23 17:33 @773

Muchas gracias por su aclaración.

Tengo la necesidad de realizar el siguiente ejemplo. No sé si quizás puede darme un ejemplo o algún enlace donde pueda obtener la ayuda de lo que necesito realizar. Le explico.

SISTEMA: sistema de votación, el cual tiene dos opciones: "si" o "no". El usuario puede votar cualquier opción.
LIMITANTES: solo se puede votar una vez pero ELIMINANDO LAS COOKIES SE PUEDE VOLVER A VOTAR HACIENDO UN TOTAL DE 8 votos por opción, es decir, 8 síes y 8 noes hacen un total de 16.

Y EL SISTEMA IMPIDE ACCESO DURANTE 15 MINUTOS PARA PODER VOLVER A VOTAR LUEGO DE LOS 16 VOTOS.

En una prueba de concepto PoC de bypass sistema de votación se realizó un script que realicé esta votación y para sortear el tema de la limitante de 15 minutos se optó por elegir una lista de proxy. Así tengo 10 proxy x 8 votos = 80 votos.

Estoy pensando en realizar con hilos basándome en los ejemplos de esta web: http://carlosyr.blogspot.com/2013/11/hi ... -perl.html

El procedimiento es básicamente sencillo lo cual necesito aplicarle proxy e hilos.


PROCEDIMIENTO SINCRÓNICO:
  1. realizo una petición GET para obtener una llave
  2. elijo un proxy aleatorio
  3. realizo una petición GET con la llave incluida y el proxy
HASTA aquí, todo va bien.

EL PROBLEMA SE PRESENTA CUANDO "UN PROXY" ESTÁ desactivado, demora unos 15 segundos aprox. en devolver un error.

La ideal de resolver el problema:

PROCEDIMIENTO MULTIHILO 3 hilos
  • lanzo 3 hilos, cada hilo realiza una petición GET para solicitar una LLAVE
  • elijo un proxy aleatorio para cada hilo
  • realizo una petición GET con la llave incluida y el proxy en cada hilo
De esta manera tendría tres hilos haciendo lo mismo.

¿Demoraría menos tiempo que si lo hago sincrónico?

Espero pueda ayudarme, aclararme con mi duda. Gracias.
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341

Re: Utilizar diferentes proxies o IP

Notapor explorer » 2014-09-23 18:36 @817

jimr1984 escribiste:Tengo la necesidad de realizar el siguiente ejemplo. No sé si quizás puede darme un ejemplo o algún enlace donde pueda obtener la ayuda de lo que necesito realizar.
Pues... yo no conozco nada parecido... ¿Has buscado por Google?

jimr1984 escribiste:¿Demoraría menos tiempo que si lo hago sincrónico?
Sí, tardaría menos. Los ordenadores y sistemas operativos actuales permitirían hacer varias peticiones de forma simultánea, y así los retardos provocados por las respuestas de los servidores no se acumularían.

Por estos foros hemos hablado del tema de los hilos, usando Threads o fork().
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Utilizar diferentes proxies o IP

Notapor jimr1984 » 2014-09-25 08:17 @386

Muchas gracias por tu pronta respuesta, estimado.
Voy a leer el artículo sugerido. Gracias...
jimr1984
Perlero nuevo
Perlero nuevo
 
Mensajes: 123
Registrado: 2012-11-25 07:11 @341


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados

cron