一段时间后,Perl脚本停止工作

时间:2015-09-06 14:31:21

标签: perl

我有一个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。

网站上的错误是说添加更多细节,我不知道要描述更多内容。抱歉这个毫无意义的一行。

1 个答案:

答案 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;
}