• 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.

Notapor explorer » 2007-12-18 13:15 @594

Esta es una versión que imprime correctamente el HTML.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl

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";

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',
        },
        [
            Tr([
                td([
                    img( { src => 'http://images.insecure.org/images/Insecurelogo-eye-90x168.gif' } ),
                    (
                        strong('Reporte creado el dia: ') . $hora          . br() .
                        strong('Opciones Nmap: '        ) . $opciones_scan . br() .
                        strong('Archivo de Host: '      ) . $lista
                    ),
                ]),
            ])
        ]
    );

# Comenzamos el escaneo
my @escaneo_ip;
$scanner->scan($opciones_scan);

# 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 => '#242424' }, "$_->{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 => '#848484' },
                        font({ face => 'Verdana', size => 1, color => '#242424' },
                            join q{<br />}, @{$_->{port}}
                        ),
                    ),
                ]
            )
        } grep { defined $_->{port} } @escaneo_ip
    ),

    end_html
    ;

close HTML;

# Comprobación
use Data::Dumper;
print Dumper(\@escaneo_ip);

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 $puerto_estado = ( $puerto eq 'open'  ) ?
            font({color=>'#00FF00'}, 'open'  ) :
            font({color=>'#FF0000'}, 'closed') ;

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

__END__
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
Aunque sería mejor hacerlo de otra forma: Nmap::Scanner puede devolver el resultado del escaneo en formato XML. Bueno, pues a partir de ahí se puede generar más fácil el HTML que quieres presentar.
Última edición por explorer el 2007-12-19 04:35 @232, 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: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Notapor situ » 2007-12-18 15:27 @685

Explorer,
Desde ya gracias por todo, pero sigo con el mismo problema de antes, no puedo mostrar las direcciones IP encontradas en una sola tabla arriba del escaneo :S
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-12-19 04:39 @235

¡Conseguido!
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-12-19 10:33 @481

Explorer,
Perdón por mi ignorancia pero ahora la información me la muestra por consola y no en el html :S.
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-12-19 13:30 @604

La salida en pantalla es debido al Dumper. Quítalo si quieres. Pero sí que genera la salida para el fichero. Fíjate que hay un open y todos los print van hacia el HTML.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-12-19 14:01 @626

Obtengo solamente las direcciones IP en el HTML, los puertos ya no están mas :S.
Imagen
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-12-19 15:03 @668

¡Claro, están ocultos! Tienes que pinchar en la fila de cada IP para ver los puertos detectados...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-12-19 15:32 @689

La verdad que me saco el sombrero. ¡Muy bueno! Consulta :s ¿Hay forma de que aparezca debajo de la IP y no debajo de todas las IP...?

Igual quedó muy bueno. Mil gracias.

Más que nada porque si abrís muchos se mezclan los puertos :s-
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

Notapor explorer » 2007-12-19 16:25 @725

Sí que hay forma: consiste en meter toda la información en solo una tabla y no en dos como está ahora. Luego, por cada IP encontrada la mapeamos a dos filas de la tabla. En la primera fila ponemos lo mismo que ponemos ahora: el evento onclick() y la información de la IP. Y la fila siguiente, los puertos.

De esa manera saldrá la información de los puertos debajo de cada IP.

Lo ideal también es cambiar los colores de las filas, para distinguirlas un poco.

Habría que cambiar un poco las líneas del programa actual...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor situ » 2007-12-20 17:19 @763

Ok , voy a probarlo ya que todavía no entiendo 100% el script :D
situ
Perlero nuevo
Perlero nuevo
 
Mensajes: 358
Registrado: 2007-04-09 01:44 @114

AnteriorSiguiente

Volver a Módulos

¿Quién está conectado?

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

cron