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

Perl脚本在一段时间后停止工作,perl,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");

我有一个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';
    }
}
#/usr/bin/perl
#M-A_labz
#模块
使用HTTP::请求;
严格使用;
使用Win32::Console::ANSI;
使用警告;
使用LWP::Simple;
使用术语:ANSIColor;
如果($^O=~/Win/){
系统(“cls”);
系统(“标题质量脚本抓取器0.1”);
}
否则{
系统(“清除”);
}
$| = 1;
打印颜色(“红色”),'
';
打印颜色“重置”;
打印颜色(“黄色”),“\n\n[+]输入列表文件Ips:”;
打印颜色“重置”;
我的$host=;
chomp($宿主);

open(SITE,问题可能是
$page
变量的值不会影响任何内容,因此
while
循环将继续无限期地获取相同的URL

也许您希望将
first
参数设置为
$page

我建议将URI模块与
URI::QueryParam
一起使用,这将允许您单独操作URL的各个部分

我不是从互联网上获取URL,而是简单地打印它。你必须小心,你有一个可靠的测试,导致循环退出。你的owwn代码的问题是你没有这样的测试

如果这种行为在服务条款范围内,我也会非常惊讶。你的预编程停止的原因可能是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;
}

发布您的代码和数据示例。这是脚本,请检查我也有一些类似的脚本,但它们不使用bing.com。请将您的代码在线发布到堆栈溢出上,作为您问题的一部分。链接可能会过时。谢谢!我们需要更多信息…例如,屏幕上最后打印的内容是什么,发生了什么…脚本是否有效xit还是挂起?另外,也许在每个循环中保留一个计数并打印出计数,这样当它失败时,您就可以知道输入中的哪一行(如果它失败的话)失败了。@Bleron,代码样式很糟糕,很难读