Últimamente cuando dispongo de tiempo (algo raro últimamente) me he aficionado por indagar en Perl. Es un lenguaje que siempre me ha gustado y aunque mucho opinen que está obsoleto sigo creyendo que este lenguaje tiene mucho potencial que ofrecer, la comunidad que se mueve entorno a él es muy grande.
Hace ya unos meses me surgió la idea de hacer un programa para utilizarlo como tester de carga de usuarios simultáneos para una web, para testear su comportamiento/rendimiento y lo que en un principio pretendía ser un programa malicioso... ya que se podría usar para fines no muy éticos, dio un giro según iba investigando.
Perl lo he utilizado a nivel profesional para ocasiones muy puntuales y no he tenido la oportunidad de hacer un "programa" en condiciones.
El código que abajo os dejo tampoco es una maravilla, pero es algo que hice probando "el año pasado" el intento de hacer un Spider. Está muy verde y no se cuando volveré a disponer del tiempo y las ganas suficientes como para investigar después de la jornada de trabajo. Pero aquí os dejo un fragmeto que puede iniciar a los no muy decididos o principiantes sobre este lenguaje.
PERL:
-
#!/usr/bin/perl -w
-
use strict;
-
use LWP::UserAgent;
-
use HTTP::Request;
-
-
my $url = "http://www.google.com";
-
-
&webFlood($url);
-
-
sub webFlood {
-
my ($url) = @_;
-
-
my $html = &leerUrl($url);
-
-
my @enlaces = &buscarLink($html);
-
-
my $contador = @enlaces;
-
-
if($contador> 0){
-
foreach(@enlaces){
-
my $link = $_;
-
print ("\n[ Url ] ".
$link);
-
&webFlood($link);
-
}
-
}else{
-
-
}
-
}
-
-
-
-
sub leerLinks {
-
-
#my ($url) = @_;
-
#my $html = &leerUrl($url);
-
my (@links) = @_;
-
my $html;
-
my @enlaces;
-
my $i = 0;
-
foreach (@links) {
-
-
my $link = $_;
-
-
#print( " [Link] " . $link . "\n" );
-
$html = &leerUrl($link);
-
$enlaces[$i] = &buscarLink($html);
-
$i++;
-
}
-
-
}
-
-
sub leerUrl {
-
my ($url) = @_;
-
-
my $ua = LWP::UserAgent->new;
-
$ua->agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 2000; DigExt)");
-
-
my $req = HTTP::Request->new( GET => $url );
-
-
my $response = $ua->request($req);
-
-
-
}
-
-
sub buscarLink {
-
my ($html) = @_;
-
my @links;
-
my $i = 0;
-
while ( $html =~ /href="(.*?)".*?>/isg ) {
-
$links[$i] = ($1);
-
$i++;
-
}
-
-
}
Lo que haces es leer una URL y del HTML que recoge coge solo el contenido de los href. Obviamente como ya sabréis, no todos los href son enlaces. Falta mucho que depurar pero es un buen pasatiempo cuando se tiene la mente descansada. Cuando le haga algún cambio os lo publico.
Si os surge alguna duda sobre algo del código siempre podéis comentar :-)