Lun Abr 14, 2008 3:30 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
| Consulta sobre URL |
|
|
Los molesto porque estoy intentando terminar un script, el cual lo que hace es buscar en una url la palabra "marcos".
Prueba las siguientes urls:
| Código: |
http://localhost/legajo.php/legajos.txt
http://localhost/legajos.php/legajos.txt |
Hasta ahí anda todo, pero me gustaría poder hacer que busque en varios archivos la palabra "marcos"; en este momento está seteado solamente "legajos.txt", pero tengo un archivo el cual dentro contiene el nombre de varios archivos que tendría que buscar esta palabra.
Probé hacer un array leyendo este archivo pero no me funcionó.
Gracias.
| Perl: | #!/usr/bin/perl
use HTTP:: Request;
use LWP:: UserAgent;
$host= 'http://localhost/';
$string= "marcos";
$archi= 'legajos.txt';
$pagina1= "legajo.php";
$pagina2= "legajos.php";
for ($i= 1; $i< 3; $i++ ) {
$cont=pagina. $i;
chomp $cont;
$webs= $host.$ $cont. "$archi";
my $req=HTTP:: Request-> new(GET=> $webs);
my $ua=LWP:: UserAgent-> new();
$ua-> timeout(30);
my $response= $ua-> request($req);
if ($response-> is_success) {
if( $response-> content =~ / $string/ ) {
print "$webs";
}
}
} |
Ultima edición por situ el Lun Abr 14, 2008 4:05 pm, editado 1 vez |
|
|
|

Lun Abr 14, 2008 3:57 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| Humm... ¿qué es lo que hace la función vuln()? |
|
Lun Abr 14, 2008 4:05 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
Perdón, me confundí en el código, ya que subí un mirror al script que tengo en mi trabajo.
Gracias |
|
Lun Abr 14, 2008 4:09 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| Bien... ¿Qué hace la función pagina()? |
|
Lun Abr 14, 2008 4:13 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
Lo que hace es generar una variable con el contenido de $pagina.i donde "i" es el número de la variable, en mi caso tengo:
| Perl: | $pagina1="legajo.php";
$pagina2="legajos.php"; |
Dando así:
| Perl: | $webs=$host.$$cont."$archi"; |
que sería algo como :
| Perl: | $webs=$hosts.$pagina1."$archi";
o
$webs=$hosts.$pagina2."$archi"; |
ya que es un for. |
|

Lun Abr 14, 2008 5:13 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
Vaya... ¿y no es más fácil usar un array?
Y, además, el URL que sale de $webs=$hosts.$pagina1."$archi"; es 'http://localhost/legajo.phplegajos.txt'.
Te falta el carácter '/'.
| Perl: | #!/usr/bin/perl
use HTTP:: Request;
use LWP:: UserAgent;
$host = 'http://localhost';
$string = "marcos";
$archi = 'legajos.txt';
@paginas = qw( legajo.php legajos.php );
for ($i = 0; $i <= @paginas; $i++ ) {
$webs = "$host/$paginas[$i]/$archi";
# ...
} |
Item más...
| Perl: | foreach $pagina ( @paginas ) {
$webs = "$host/$pagina/$archi";
# ...
} |
|
|
Lun Abr 14, 2008 5:15 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
¡Ah!, muchas gracias.
Consulta: cómo puedo hacer para que la variable $arch sea un array conteniendo lo que tengo dentro de un archivo con nombre "file.txt", ya que en realidad tengo varios archivos donde buscar.
Gracias. |
|

Lun Abr 14, 2008 5:22 pm
|
 |
kidd
Creador de Perl en Español

|
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
|
|
|
|
|
Considerando que tengas un archivo llamado lista_de_archivos.txt y cuyo contenido sea similar a:
| Código: |
file.txt
file2.txt
file3.txt |
Entonces podrías usar el siguiente código:
| Perl: | #!/usr/bin/perl
use warnings;
use strict;
use HTTP:: Request;
use LWP:: UserAgent;
my $host = 'http://localhost';
my $string = "marcos";
#Lista de paginas en un array, así es fácil agregar más páginas
my @paginas = ("legajo.php", "legajos.php");
#Abrimos el archivo con la lista de archivos a leer
open my $FILE, '<', 'lista_de_archivos.txt' or die $!;
my @archivos = < $FILE>;
close $FILE;
#Creamos nuestro objeto LWP
my $ua = LWP:: UserAgent-> new();
$ua-> timeout(30);
#Iteramos en cada archivo
for my $archivo(@archivos){
chomp $archivo;
#Iteramos en cada pagina
for my $pagina(@paginas){
#Armamos el url
my $url = join "/", $host, $pagina, $archivo;
#Creamos un nuevo request
my $req = HTTP:: Request-> new(GET=> $url);
my $response = $ua-> request($req);
if ($response-> is_success) {
if( $response-> content =~ / $string/mi ) {
print "$url\n";
}
}
}
} |
Limpié el código bastante, y de una vez te puse para que usaras un array.
Saludos |
|

Lun Abr 14, 2008 5:38 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
| Mil gracias por todo. |
|

Mar Abr 15, 2008 8:46 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
Le agregué para que me guarde el reporte en HTML pero solamente me guarda el primer archivo encontrado y no los demás :S.
| Perl: |
#!/usr/bin/perl
use warnings;
use strict;
use HTTP:: Request;
use LWP:: UserAgent;
my $host = 'http://localhost';
my $string = "marcos";
#Lista de paginas en un array, así es fácil agregar más páginas
my @paginas = ("legajo.php", "legajos.php");
#Abrimos el archivo con la lista de archivos a leer
open my $FILE, '<', 'lista_de_archivos.txt' or die $!;
my @archivos = < $FILE>;
close $FILE;
# Abro el archivo que sera el reporte final
open (F, ">> reporte.html");
print F "<html><head>\n";
print F "<meta http-equiv=Content-Type content='text/html;charset=iso-8859-1' />\n";
print F "<title>marcos archivos</title>\n";
print F "</head>\n";
print F "<body>\n";
print F " <table border='0' align=center width=650 cellpadding='0' cellspacing='0' bgcolor=#333333>\n";
print F " <tr><td bgcolor=#6666ff><font color=#ffffff face=Verdana size=1>Informacion</font></td></tr>\n";
print F " <tr><td><font color=#ffffff face=Verdana size=1><strong>Host:</strong> $host</font></td></tr>\n";
print F " <tr><td><font color=#ffffff face=Verdana size=1><strong>String:</strong> $string</font></td></tr>\n";
print F " <tr><td><font color=#ffffff face=Verdana size=1><strong>Reporte:</strong> reporte.html</font></td></tr>\n";
#Creamos nuestro objeto LWP
my $ua = LWP:: UserAgent-> new();
$ua-> timeout(30);
#Iteramos en cada archivo
for my $archivo(@archivos){
chomp $archivo;
#Iteramos en cada pagina
for my $pagina(@paginas){
#Armamos el url
my $url = join "/", $host, $pagina, $archivo;
#Creamos un nuevo request
my $req = HTTP:: Request-> new(GET=> $url);
my $response = $ua-> request($req);
if ($response-> is_success) {
if( $response-> content =~ / $string/mi ) {
#Cerramos el reporte
print F " <tr><td bgcolor=#6666ff><font color=#ffffff face=Verdana size=1>archivos:\</font></td></tr>\n";
print F " <tr><td><font color=#ffffff face=Verdana size=1>$url\n</font></td></tr>\n";
print F " </table></body></html>\n";
close (F );
}
}
}
} |
Saludos |
|

Mar Abr 15, 2008 9:12 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| Claro, tienes puesto el '</html>' y el close() dentro del bucle... |
|
Mar Abr 15, 2008 10:11 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
| Muchísimas Gracias |
|

Dom Abr 20, 2008 11:39 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
| Ahora una salida PDF |
|
|
Estoy tratando de guardar la salida en un archivo PDF, ya que gracias a ustedes pude hacerlo en formato HTML.
Tengo un problema: solamente me guarda el último resultado:
| Perl: | #!/usr/bin/perl
use warnings;
use strict;
use HTTP:: Request;
use LWP:: UserAgent;
my $host = 'http://localhost';
my $string = "marcos";
#Lista de paginas en un array, así es fácil agregar más páginas
my @paginas = ("legajo.php", "legajos.php");
#Abrimos el archivo con la lista de archivos a leer
open my $FILE, '<', 'lista_de_archivos.txt' or die $!;
my @archivos = < $FILE>;
close $FILE;
#Creamos nuestro objeto LWP
my $ua = LWP:: UserAgent-> new();
$ua-> timeout(30);
#Iteramos en cada archivo
for my $archivo(@archivos){
chomp $archivo;
#Iteramos en cada pagina
for my $pagina(@paginas){
#Armamos el url
my $url = join "/", $host, $pagina, $archivo;
#Creamos un nuevo request
my $req = HTTP:: Request-> new(GET=> $url);
my $response = $ua-> request($req);
if ($response-> is_success) {
if( $response-> content =~ / $string/ ) {
#Cerramos el reporte
my $pdf = new PDF:: Report(
PageSize => 'A4',
PageOrientation => 'Portrait'
);
$pdf-> newpage(1);
$pdf-> setFont('Helvetica-bold');
$pdf-> setSize(14);
my ($width, $height) = $pdf-> getPageDimensions();
$pdf-> centerString(0, $width, $height- 40, "Reporte");
$pdf-> setFont('Helvetica');
$pdf-> setSize(10);
$text2= "Host: $host";
$text3= "Archivo: lista_de_archivos.txt";
$text4= "String: $string";
$text5= "Reporte: reporte.pdf";
$text6= "$url\n";
$pdf-> addParagraph($text1, 30, $height- 70, $width- 60, 30, 25, 10);
$pdf-> addParagraph($text2, 30, $height- 80, $width- 60);
$pdf-> addParagraph($text3, 30, $height- 90, $width- 60);
$pdf-> addParagraph($text4, 30, $height- 100, $width- 60);
$pdf-> addParagraph($text5, 30, $height- 110, $width- 60);
$pdf-> addParagraph($text6, 30, $height- 120, $width- 70);
open(PDF, "> reporte.pdf") or die "ERROR: No puedo escribir en reporte.pdf: $!\n";
print PDF $pdf-> Finish();
}
}
}
}
close(PDF );
exit; |
Si alguno me puede ayudar se lo voy agradecer 
Ultima edición por situ el Dom Abr 20, 2008 2:12 pm, editado 1 vez |
|

Dom Abr 20, 2008 12:48 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4222
Ubicación: Valladolid, España
|
|
|
|
|
| Porque $reporte siempre vale lo mismo... de hecho, el 'strict' te dirá que esa variable no ha sido inicializada... |
|
Dom Abr 20, 2008 2:13 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 146
|
|
|
|
|
| Ahí lo arreglé. Le puse reporte.pdf directamente, pero ¿cómo puedo hacer para que me guarde todos los resultados y no solamente el último? |
|
Powered by phpBB © 2001, 2005 phpBB Group
|