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 Anterior  1, 2, 3, 4  Siguiente
 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos
Mensaje Mar Dic 18, 2007 12:15 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

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

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

Ultima edición por explorer el Mie Dic 19, 2007 3:35 am, editado 1 vez
Mensaje Mar Dic 18, 2007 2:27 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

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
Mensaje Mie Dic 19, 2007 3:39 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

¡Conseguido!
Mensaje Mie Dic 19, 2007 9:33 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

Explorer,
Perdón por mi ignorancia pero ahora la información me la muestra por consola y no en el html :S.
Mensaje Mie Dic 19, 2007 12:30 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

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.
Mensaje Mie Dic 19, 2007 1:01 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

Obtengo solamente las direcciones IP en el HTML, los puertos ya no están mas :S.
Mensaje Mie Dic 19, 2007 2:03 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

¡Claro, están ocultos! Tienes que pinchar en la fila de cada IP para ver los puertos detectados...
Mensaje Mie Dic 19, 2007 2:32 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

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-
Mensaje Mie Dic 19, 2007 3:25 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

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...
Mensaje Jue Dic 20, 2007 4:19 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

Ok , voy a probarlo ya que todavía no entiendo 100% el script Very Happy
Mensaje Mar Ene 22, 2008 8:07 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

Bueno, sigo con mi script. Ahí lo modifiqué; estoy usando el mío por ahora ya que no me llevo muy bien con la solución de los módulos CGI.

Consulta: tengo dentro del script una función la
cual contiene una breve descripción de cada ports; está definida en variables con el número de port, por ejemplo:
my port22 = "SSH, scp, SFTP";

Me gustaría poder agregar esta descripción al reporte para que sea un poco más completo, digamos que se cree debajo de todo una tabla con la descripción de cada ports pero si por ejemplo el port 22 figura 2 veces porque son muchas IP, que solo me de una descripción.

Estuve tratando de hacerlo pero no lo logro.

Gracias
Mensaje Mar Ene 22, 2008 9:13 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

En vez de crear muchas variables distintas, puedes tener un hash:

Perl:
my %ports = (
    21  => 'FTP',
    22  => 'SSH, scp, SFTP',
    23  => 'telnet',
);
Mensaje Mar Ene 22, 2008 9:19 am
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

Explorer,
Tienes razón, es un buen método, pero la verdad no sé todavía cómo puedo hacer para que luego de terminar el escaneo obtenga la tabla con la descripción de los puertos descubiertos. :S
Mensaje Mie Feb 13, 2008 2:49 pm
situ
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Abr 2007
Mensajes: 132
Responder citando

Explorer.
Perdón pero por mi ignorancia en el tema. No entiendo mucho el tema de la ocultación.

¿Me lo podrías poner más limpio, por favor?

Quiero ocultar una tabla pero ver el título, como hiciste vos, que esté como título la IP pero el contenido está oculto.

Gracias
Mensaje Mie Feb 13, 2008 4:05 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
Responder citando

Pues para ocultar uso el estilo "display:none". Para mostrar el elemento, le pongo un valor distinto de "none".
Publicar nuevo tema   Responder al tema    Foros de discusión -> Módulos Todas las horas son GMT - 6 Horas
Ir a página Anterior  1, 2, 3, 4  Siguiente
Página 3 de 4



Powered by phpBB © 2001, 2005 phpBB Group