Vie Dic 07, 2007 4:20 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
| Consulta sobre Nmap::Scanner |
|
|
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 |
|
|
|

Vie Dic 07, 2007 7:38 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3915
Ubicación: Valladolid, España
|
|
|
|
|
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
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. |
|
Vie Dic 07, 2007 7:42 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Explorer,
Gracias  |
|
Vie Dic 07, 2007 8:41 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Consulta: ¿hay posibilidades de mostrar el resultado pero con formato HTML?, así como está pero que me cree una página HTML  |
|
Vie Dic 07, 2007 9:20 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3915
Ubicación: Valladolid, España
|
|
|
|
|
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. |
|
Sab Dic 08, 2007 1:39 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Explorer,
¿Tienes algún enlace que pueda tomar como ejemplo? porque la verdad, no me doy cuenta de cómo hacerlo :s |
|
Sab Dic 08, 2007 2:46 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3915
Ubicación: Valladolid, España
|
|
|
|
|
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 |
|
Dom Dic 09, 2007 9:24 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
| Como siempre muchas gracias :d |
|
Dom Dic 09, 2007 9:34 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Una consulta: cómo puedo hacer para guardar la salida en pantalla en un archivo
Saludos |
|
Dom Dic 09, 2007 5:30 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Explorer,
Pido disculpas, una consulta: ¿cómo puedo hacer para guardar la salida en un archivo? |
|
Dom Dic 09, 2007 7:45 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3915
Ubicación: Valladolid, España
|
|
|
|
|
Tienes que hacer un open(). Luego, en cada print(), lo modificas para que saque la salida al manejador 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. |
|
Lun Dic 10, 2007 2:57 pm
|
 |
situ
Perlero Frecuente

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

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
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. |
|
Lun Dic 10, 2007 5:52 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 3915
Ubicación: Valladolid, España
|
|
|
|
|
| Pero... ¿El reporte está hecho para todas las IP? ¿O quieres decir seleccionar una IP para crear el reporte y luego mostrarlo? |
|
Powered by phpBB © 2001, 2005 phpBB Group
|