我有一个Perl脚本,最多可扫描400k行。它有时会停止,没有任何错误消息。如何解决这个问题?
这是我的代码,已编辑
#!/usr/bin/perl
# M-A_labz
# Modules
use HTTP::Request;
use strict;
use Win32::Console::ANSI;
use warnings;
use LWP::Simple;
use Term::ANSIColor;
if ( $^O =~ /Win/ ) {
system("cls");
system("title Mass Scripts Grabber 0.1");
}
else {
system("clear");
}
$| = 1;
print color("red"), '
';
print color 'reset';
print color("yellow"), "\n\n[+] Enter List File Ips : ";
print color 'reset';
my $host = <STDIN>;
chomp($host);
open (SITE, "<$host") || die "[-] Can't open the List of site file !";
my @SITE = <SITE>;
close SITE;
foreach my $xp (@SITE) {
chomp $xp;
my $ip = $xp;
chomp ($ip);
my %group;
if ( $ip !~ /^(\d+)\.(\d+)\.(\d+)\.(\d+)$/ ) {
print color("bold white"), "# Skiping $ip\n";
print color 'reset';
}
my $page = 0;
print color("green"), "Working on $ip\n";
print color 'reset';
print color("bold white"), "[#] Begin Reserving !";
print color 'reset';
while (1) {
my $content = get("http://www.bing.com/search?q=ip:$ip&count=50&first=1&FORM=PERE")
or die("Error getting output\n");
my $status = keys %group;
while ( $content =~ /<cite>[:\/\/]*([\w\.\-]+)[\w+\/\.\-_:\?=]*<\/cite>/g ) {
$group{$1} = undef;
}
last if ( $status == keys %group );
$page = $page + 10;
}
print color("bold white"), "\n# OUTPUT for $ip\n";
print color 'reset';
open (IN,">reverse-$ip.txt");
foreach my $host (keys %group) {
print IN "$host\n";
}
close(IN);
open (F, "<reverse-$ip.txt")
|| die "[-] Can't open the List Of Domains Names!";
my @DOMAINS = <F>;
close F;
foreach my $D (@DOMAINS) {
chomp $D;
print color("bold white"), "[-] $D :[Unknown] \n";
print color 'reset';
}
}
如您所见,我扫描最多400k IP。
网站上的错误是说添加更多细节,我不知道要描述更多内容。抱歉这个毫无意义的一行。
答案 0 :(得分:1)
问题可能是$page
变量的值不会影响任何内容,因此while
循环将无限期地继续获取相同的网址
也许您希望将first
参数设置为$page
?
我建议将URI模块与URI::QueryParam
一起使用,这样您就可以单独操作URL的某些部分。它可能看起来像这样,例如
我只是打印它而不是从互联网上获取URL。你必须小心,你有一个可靠的测试,导致循环退出。你自己的代码的问题是你没有这样的测试
如果此行为属于服务条款,我也会感到非常惊讶。您的预制图完全停止的原因可能是因为Bing已经注意到来自您的IP地址的大量相同的自动请求并阻止了您。如果你坚持下去,那么你很可能会遇到麻烦
#!/usr/bin/perl
use strict;
use warnings;
use v5.10;
use URI;
use URI::QueryParam;
my $url = URI->new('http://www.bing.com/search');
$url->query_param( count => 50 );
$url->query_param( FORM => 'PERE' );
my $ip = '127.0.0.1';
my $page = 1;
while () {
$url->query_param( q => $ip );
$url->query_param( first => $page );
say $url;
last if $page == 10;
++$page;
}