• Publicidad

Consulta sobre Nmap::Scanner

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Consulta sobre Nmap::Scanner

Notapor situ » 2007-12-07 17:20 @764

Buenas los molesto porque tengo el siguiente código el cual al ejecutarlo obtengo varios errores los cuales no sé cómo solucionarlos.

Script Modificado - 24/02/08 -

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl
BEGIN {
    eval "use Nmap::Scanner";
    if ( $@ ) {
        warn  "Error to load module: Nmap::Scanner\n"
        . "Install Module:\n"      
        . "\t\tcpan\n"
        . "\t\tcpan> install Nmap::Scanner\n";
exit ();
 }
}
use CGI ':standard';
use Nmap::Scanner;
use POSIX 'strftime';

use strict;
use warnings;

if ( @ARGV < 2 ) {
    die "\nUso: $0 <hosts.txt> <reporte.html>\n\n"
      . "   hosts.txt    Archivo que contiene las direcciones IP a auditar\n"
      . "   reporte.html Archivo el cual nos mostrara el reporte final de la auditoria\n\n"
      ;
}

my ($lista,$fichero) = @ARGV;

my $hora = strftime("%Y-%m-%d", localtime);

my $scanner = Nmap::Scanner->new();
$scanner->register_scan_started_event(\&scan_started);
$scanner->register_port_found_event(\&port_found);

my $opciones_scan = "-sS -A -vv -iL $lista";

my $antes = time();

open HTML, ">$fichero" or die "ERROR: No puedo escribir en $fichero:$!\n";

print HTML
    start_html({
        title => "Nmap Report $hora Red: $lista",

        script=> q(function cambia(ip) {
        var tr = document.getElementById(ip);
        if ( tr.style.display == "none" ) {
             tr.style.display = "table-row";
        }
        else {
             tr.style.display = "none";
        }
})
    }),

    table(
        {
            border      => 0,
            align       => 'center',
            width       => 700,
            cellpadding => 0,
            cellspacing => 0,
            bgcolor     => '#E6E6FA',
            background  =>'header.gif',
        },
        [
            Tr([
                 td([
                   
                    (
                      {rowspan  =>'4', width  =>'10%'},
                    ),
                ]),
                td([
                   
                    (
                      font({ face => 'Verdana', size => 1, color => '#ffffff' }, "Reporte creado el dia: $hora"),      
                    ),
                ]),
                td([
                   
                    (
                      font({ face => 'Verdana', size => 1, color => '#ffffff' }, "Opciones Nmap: $opciones_scan"),     
                    ),
                ]),
                td([
                   
                    (
                  font({ face => 'Verdana', size => 1, color => '#ffffff' }, "Archivo de Hosts: $lista"),
                    ),
                ]),

                td([    
                    (
                  font({ face => 'Verdana', size => 1, color => '#ffffff' }, "Caracteristicas: ") .
                  font({ face => 'Verdana', size => 1, color => '#f3c035' }, "hosts - ") .
                  font({ face => 'Verdana', size => 1, color => '#00ff00' }, "active - ").
                  font({ face => 'Verdana', size => 1, color => '#ff0000' }, "no responds - ").
                  font({ face => 'Verdana', size => 1, color => '#00ff00' }, "open - ").
                  font({ face => 'Verdana', size => 1, color => '#ff0000' }, "close - ").
                  font({ face => 'Verdana', size => 1, color => '#6666ff' }, "tcp - ").
                  font({ face => 'Verdana', size => 1, color => '#666600' }, "udp"),
                    ),
                ]),

            ])
        ]
    );

# Comenzamos el escaneo
my @escaneo_ip;
$scanner->scan($opciones_scan);
my $duracion = time() - $antes;
# Salida del resultado
print HTML
    table(
        {
            border      => 0,
            align       => 'center',
            width       => 700,
            cellpadding => 0,
            cellspacing => 0,
            bgcolor     => '#f2f2f2',
        },
        Tr([
            map {
                td( { bgcolor => '#848484', onclick => "cambia('$_->{addresses}')" },
                    font({ face => 'Verdana', size => 1, color => '#f3c035' }, "$_->{hostname} ($_->{addresses})"),
                    $_->{status},
                ),
            } @escaneo_ip
        ])
    ),

    br(),

    table(
        {
            border      => 0,
            align       => 'center',
            width       => 700,
            cellpadding => 0,
            cellspacing => 0,
            bgcolor     => '#F2F2F2',
        },

        map {
            Tr(
                { id => $_->{addresses}, style => 'display:none' },
                [
                    td( { bgcolor => '#e6e6fa' },
                        font({ face => 'Verdana', size => 1, color => '#242424' },
                            join q{<br />}, @{$_->{port}}
                        ),
                    ),
                ]
            )
        } grep { defined $_->{port} } @escaneo_ip
    ),


 table(
        {
            border      => 0,
            align       => 'center',
            width       => 700,
            cellpadding => 0,
            cellspacing => 0,
            bgcolor     => '#646464',
        },
        [
            Tr([
               
                td([
                   
                    (
                      font({ face => 'Verdana', size => 1}, "Time to ejecution: $duracion seconds"),   
                    ),
                ]),

            ])
        ]
    ),


    end_html
    ;



close HTML;


sub scan_started {
    my $self      = shift;
    my $host      = shift;

    my $hostname  = $host->hostname();
    my $addresses = join(',', map { $_->addr() } $host->addresses());
    my $status    = $host->status();

    $status = ( $status eq 'up' )
            ?   font({ face => 'Verdana', size => 1, color => '#00FF00' }, 'Activo'      )
            :   font({ face => 'Verdana', size => 1, color => '#FF0000' }, 'No responde' )
            ;

    # Guardamos la dirección, para crear la tabla fuera
    push @escaneo_ip, { hostname => $hostname, addresses => $addresses, status => $status };
}

sub port_found {
    my $self      = shift;
    my $host      = shift;
    my $port      = shift;

    my $name      = $host->hostname();
    my $puerto    = $port->state();
    my $proto     = $port->protocol();

    my $puerto_estado = ( $puerto eq 'open'  ) ?
            font({color=>'#00FF00'}, 'open'  ) :
            font({color=>'#FF0000'}, 'closed') ;

    my $puerto_proto = ( $proto eq 'tcp'  ) ?
            font({color=>'#6666ff'}, 'tcp'  ) :
            font({color=>'#666600'}, 'udp') ;

    # Guardamos los puertos detectados
    push @{ $escaneo_ip[-1]->{port} },
            join q{ },
                $puerto_estado,
                $puerto_proto,
                $port->portid(),
                ((defined $port->service()->name()   ) ? $port->service()->name()    : ''),
                ((defined $port->service()->version()) ? $port->service()->version() : ''),
            ;
}

__END__
 
Coloreado en 0.010 segundos, usando GeSHi 1.0.8.4



Saludos.
Última edición por situ el 2008-02-24 11:31 @522, editado 10 veces en total
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Publicidad

Notapor explorer » 2007-12-07 20:38 @901

Si la línea 26 se refiere a la del último print, yo creo que puede referirse a service(), es decir, que nmap no ha encontrado el nombre del servicio...

Puedes solventarlo poniendo
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
    no warnings;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4

dentro de la función port_found().

Aunque, claro, si lo hacemos, Perl no nos ayudará en el desarrollo del programa.

No pasa nada. Mantén los warnings activos hasta que hayas comprobado que el programa funciona. Luego, en producción, los quitas.
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

Notapor situ » 2007-12-07 20:42 @904

Explorer,
Gracias :D
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor situ » 2007-12-07 21:41 @945

Consulta: ¿hay posibilidades de mostrar el resultado pero con formato HTML?, así como está pero que me cree una página HTML :D
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-12-07 22:20 @972

Fácil: haces que todo el contenido generado por nmap salga dentro de unas marcas <pre>.

Todo lo demás (comienzo y final de la página HTML) es fijo.
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

Notapor situ » 2007-12-08 14:39 @652

Explorer,
¿Tienes algún enlace que pueda tomar como ejemplo? porque la verdad, no me doy cuenta de cómo hacerlo :s
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-12-08 15:46 @698

Justo antes de $scanner->scan() haces print del comienzo del HTML (<html><body>...) y una marca de inicio de preformateado: <pre>.

Luego, después del scan(), haces lo mismo, pero al contrario: cierras las marcas abiertas antes: (</pre></body></html>).

Otra forma es:
Sacas el contenido de scan directamente a pantalla con la única cabecera previa:

Content-Type: text/plain

Así, el navegador web sabe que tiene que pintar un texto normal.
Última edición por explorer el 2007-12-10 18:45 @822, editado 1 vez en total
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

Notapor explorer » 2007-12-09 10:09 @464

Puedes usar marcas
Sintáxis: [ Descargar ] [ Ocultar ]
  1. <font color="#00ff00"> levantado </font> 
o, mejor, definir un estilo css, en la parte del <head>, o en un fichero de estilos, aparte.
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

Notapor situ » 2007-12-09 10:24 @475

Como siempre muchas gracias :d
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor situ » 2007-12-09 10:34 @481

Una consulta: cómo puedo hacer para guardar la salida en pantalla en un archivo :D
Saludos
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Siguiente

Volver a Módulos

¿Quién está conectado?

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