Mar Dic 18, 2007 12:15 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
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 |
|
|
|

Mar Dic 18, 2007 2:27 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
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 |
|
Mie Dic 19, 2007 3:39 am
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
| ¡Conseguido! |
|
Mie Dic 19, 2007 9:33 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Explorer,
Perdón por mi ignorancia pero ahora la información me la muestra por consola y no en el html :S. |
|
Mie Dic 19, 2007 12:30 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
| 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. |
|
Mie Dic 19, 2007 1:01 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
Obtengo solamente las direcciones IP en el HTML, los puertos ya no están mas :S.
 |
|
Mie Dic 19, 2007 2:03 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
| ¡Claro, están ocultos! Tienes que pinchar en la fila de cada IP para ver los puertos detectados... |
|
Mie Dic 19, 2007 2:32 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
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- |
|
Mie Dic 19, 2007 3:25 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
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... |
|
Jue Dic 20, 2007 4:19 pm
|
 |
situ
Perlero Frecuente

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

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
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 |
|

Mar Ene 22, 2008 9:19 am
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
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 |
|
Mie Feb 13, 2008 2:49 pm
|
 |
situ
Perlero Frecuente

|
Registrado: 09 Abr 2007
Mensajes: 132
|
|
|
|
|
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 |
|
Mie Feb 13, 2008 4:05 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4035
Ubicación: Valladolid, España
|
|
|
|
|
| Pues para ocultar uso el estilo "display:none". Para mostrar el elemento, le pongo un valor distinto de "none". |
|
Powered by phpBB © 2001, 2005 phpBB Group
|