Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Consulta sobre Nmap::Scanner
Ir a página 1, 2, 3, 4  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Vie Dic 07, 2007 4:20 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Consulta sobre Nmap::Scanner Responder citando

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

Cita:

Script Modificado - 24/02/08 -

Perl:

#!/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__



Saludos.

Ultima edición por situ el Dom Feb 24, 2008 10:31 am, editado 10 veces
Mensaje Vie Dic 07, 2007 7:38 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

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
Perl:
    no warnings;

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.
Mensaje Vie Dic 07, 2007 7:42 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Explorer,
Gracias Very Happy
Mensaje Vie Dic 07, 2007 8:41 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Consulta: ¿hay posibilidades de mostrar el resultado pero con formato HTML?, así como está pero que me cree una página HTML Very Happy
Mensaje Vie Dic 07, 2007 9:20 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Sab Dic 08, 2007 1:39 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Explorer,
¿Tienes algún enlace que pueda tomar como ejemplo? porque la verdad, no me doy cuenta de cómo hacerlo :s
Mensaje Sab Dic 08, 2007 2:46 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

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.

Ultima edición por explorer el Lun Dic 10, 2007 5:45 pm, editado 1 vez
Mensaje Dom Dic 09, 2007 9:09 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

Puedes usar marcas
HTML:
<font color="#00ff00"> levantado </font>
o, mejor, definir un estilo css, en la parte del <head>, o en un fichero de estilos, aparte.
Mensaje Dom Dic 09, 2007 9:24 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Como siempre muchas gracias :d
Mensaje Dom Dic 09, 2007 9:34 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Una consulta: cómo puedo hacer para guardar la salida en pantalla en un archivo Very Happy
Saludos
Mensaje Dom Dic 09, 2007 5:30 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Explorer,
Pido disculpas, una consulta: ¿cómo puedo hacer para guardar la salida en un archivo?
Mensaje Dom Dic 09, 2007 7:45 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

Tienes que hacer un open(). Luego, en cada print(), lo modificas para que saque la salida al manipulador de archivo que has definido con el open(). Y finalmente, un close().

En este foro, en prácticamente todos los hilos, hay un ejemplo de cómo hacerlo.

Ultima edición por explorer el Lun Sep 01, 2008 4:09 pm, editado 1 vez
Mensaje Lun Dic 10, 2007 2:57 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Explorer,
Muchas Gracias, ya me está funcionando correctamente.
Mensaje Lun Dic 10, 2007 5:15 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 143
Responder citando

Explorer,
Una consulta ya tengo mi script casi terminado, ahí edite mi primer post y lo copie.

Mi consulta es la siguiente: ¿qué método se te ocurre que puedo usar para realizar un combo-box sobre el reporte.html donde pueda seleccionar alguna de las direcciones IP de mi reporte y ver el resultado de ésta y no de todas?

Gracias.
Mensaje Lun Dic 10, 2007 5:52 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4092
Ubicación: Valladolid, España
Responder citando

Pero... ¿El reporte está hecho para todas las IP? ¿O quieres decir seleccionar una IP para crear el reporte y luego mostrarlo?
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Ir a página 1, 2, 3, 4  Siguiente
Página 1 de 4



Powered by phpBB © 2001, 2005 phpBB Group