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__
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.006 segundos, usando GeSHi 1.0.8.4