ну вот мне нужен конкретно на перле...мож у кого сорцы завалялись? ну или поправьте этот в конце концов..он работает..нужно только могопоточность прикрутить
use warnings;
use IO::Socket;
use threads;
use threads::shared;
print "Enter Start Host: ";
my $startip = <>;
print "\nEnter End Host: ";
my $endip = <>;
print "\nThreads number: ";
my $thr = <>;
print "\n Start scaning...\n\n";
my @flist=split(/\./, $startip);
my @tlist=split(/\./, $endip);
my $fip=$flist[0]*256*256*256+$flist[1]*256*256+$flist[2]*256+$flist[3];
my $tip=$tlist[0]*256*256*256+$tlist[1]*256*256+$tlist[2]*256+$tlist[3];
my $i : shared = $fip;
my @trl;
for(0..$thr) {$trl[$_] = threads->create(\&checkrange, $_);}
for(@trl) { $_->join; }
sub checkrange
{
while($i<=$tip) {
my $tmp;
{lock($i); $i++; $tmp=$i;}
my $d1=int($tmp / (256*256*256)); $tmp=$tmp-$d1*(256*256*256);
my $d2=int($tmp / (256*256)); $tmp=$tmp-$d2*(256*256);
my $d3=int($tmp / 256); $tmp=$tmp-$d3*256;
my $d4=$tmp;
my $ip="$d1.$d2.$d3.$d4";
sock($ip);
}
}
sub sock {
my $ip = shift;
my $sock = new IO::Socket::INET
(
PeerAddr => $ip,
PeerPort => '80',
PeerProto => 'tcp',
t => '5',
);
print $sock ? ("$ip is Good\n") : ("$ip is Bad\n");
}
print "Scaning finished. Press Enter to exit.";
$exit = <STDIN>;