Next Previous Contents

9. Módulo LibNet

9.1 Descripción

LibNet es un conjunto de módulos que proporciona acceso a diferentes protocolos, como FTP, NNTP (news), SMTP o POP3. No proporciona directamente acceso a funciones HTTP, porque para eso ya existe otro módulo, LibWWW.

9.2 Ejemplo de FTP: bajada recursiva de directorios


#!/usr/bin/perl -w

use Net::FTP;
use File::Basename;

        
$server = $ARGV[0];
$dir = $ARGV[1];

$conn = new Net::FTP($server,Debug,1)
        or die "Imposible conectar con $server.\n";

$conn->login
        or die "El servidor $server no permite login anónimo.\n";
$conn->binary;
bajar_dir ($conn, $dir);
exit;

sub bajar_dir
{
        my $ftpconn = $_[0];
        my $ftpdir = $_[1];
        my $localdir = basename($ftpdir);

        mkdir($localdir,0755);
        chdir($localdir);

        my @lista_ficheros = $ftpconn->ls($ftpdir);

        foreach $f (@lista_ficheros) {
                if ($ftpconn->cwd($f)) {
                        bajar_dir ($ftpconn,$f);
                        chdir("..");
                }
                else {
                        $ftpconn->get($f)
                                or die "Error al bajar $f!\n";
                }
        }
}

9.3 Ejemplo de NNTP: hacer una lista de newsgroups por patrón


#!/usr/bin/perl -w

use Net::NNTP;

sub repetir
{
        my $caracter = $_[0];
        my $veces = $_[1];

        for ($i=0; $i<$veces; $i++) {
                print $caracter;
        }
}

sub justificar_izq
{
        my $cadena = $_[0];
        my $ancho = $_[1];

        print $cadena;
        repetir (" ", ($ancho - length($cadena)));
}

$server = $ARGV[0];
$match = $ARGV[1];

if (!$match) {
        $match="*";
}

$n = new Net::NNTP("$server", Debug, 1)
        or die "Imposible conectar con $server\n";

%lista = %{$n->active($match)}
        or die "El servidor $server no soporta LIST ACTIVE\n";

$n->quit;

justificar_izq ("    Grupo", 65);
print "Artículos\n";
repetir ("-", 79);
print "\n";

foreach $g (keys %lista) {
        my @data = @{$lista{$g}};
        my $num_articulos = $data[0] - $data[1];

        justificar_izq ($g, 65);
        print "$num_articulos\n";
}

9.4 Ejemplo de POP3: ver una lista de los mensajes de un buzón POP


#!/usr/bin/perl -w

use Net::POP3;

print "\nServidor: ";
$servidor=<STDIN>; chomp($servidor);
print "Usuario: ";
$usuario=<STDIN>; chomp($usuario);
print "Password: ";
$password=<STDIN>; chomp($password);

$pop = new Net::POP3($servidor) or die "Imposible conectar al servidor";
$num_mensajes = $pop->login($usuario,$password) or die "Error en login";

print "Número de mensajes: $num_mensajes\n";

$lista = "";
$msginicial=0;

for ($n=$msginicial;$n<$num_mensajes;$n++) {
        @cabecera = $pop->top($n);
        foreach $l (@{$cabecera[0]}) {
                if ($l =~ /^From: /)  {
                        $lista .= "* $n: $l";
                }
        }
        foreach $l (@{$cabecera[0]}) {
                if ($l =~ /^(To|Subject|Date): /) {
                        $lista .= "\t$l";
                }
        }
}

$pop->quit();


Next Previous Contents