#!/usr/bin/perl use strict; use CGI; use CGI::Carp qw(fatalsToBrowser); use Net::IP; use Net::Scan::Ftp::Anonymous; use Net::Scan::Fork; use Time::HiRes qw(usleep ualarm gettimeofday tv_interval); $|=1; my $q = new CGI; print $q->header(); print_top($q); if ($q->param()){ display_results($q); } else { print_form($q); } print_end($q); exit(0); sub print_top{ print $q->start_html( -title => 'test', ); print "

title

"; } sub print_end { print "
bla bla"; print $q->end_html; } sub print_form { my ($q) = @_; print $q->start_form( -name => 'main', -method => 'POST',); print 'Insert IP Address (dotted decimal notation. Es. 192.168.0.1 or 192.168.0.1-192.168.0.10 or 192.168.0.0/24)'; print '

'; print $q->textfield(-name => "host", -size => 30); print '

'; print $q->submit(-value => 'Submit'); print $q->end_form; } sub display_results { my ($q) = @_; my @hosts; my $ip = $q->param('host'); my $newip = new Net::IP ("$ip"); do { push @hosts,$newip->ip(); } while (++$newip); my $thosts = $#hosts; $thosts++; print "$thosts hosts to scan. Let's go...

"; my $start_time = [gettimeofday]; Net::Scan::Fork::settings(20,4,3,60); foreach (@hosts){ Net::Scan::Fork::scan(\&scan,50,$_); } Net::Scan::Fork::wait_child; my $end_time = [gettimeofday]; my $elapsed = tv_interval($start_time,$end_time); print "
Completed in $elapsed seconds!
"; } sub scan { my $ip = shift; chomp $ip; $ip =~ s/^\s+|\s+$|\s+//g; if ($ip =~ /^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/ or $ip =~ /^([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])-([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])\.([01]?\d\d?|2[0-4]\d|25[0-5])$/){ my $scan = Net::Scan::Ftp::Anonymous->new({ host => $ip, timeout => 3, verbose => 1, debug => 0 }); my $results = $scan->scan; print "$ip $results
" if $results; }else{ print '
Error: no valid request.

'; } }