2015-09-06 151 views
-1

我有一个Perl脚本,应该扫描多达400k行。它有时会停止,没有任何错误消息。如何解决这个问题?Perl脚本在一段时间后停止工作

这里是我的代码,编辑

#!/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'; 
    } 
} 

正如你看到的,我扫描多达40万级的IP。

这里的一个错误是说增加更多细节,我不知道要描述更多。对不起这行毫无意义的行。

+0

发布你的代码和你的数据样本。 – stevieb

+0

这里是脚本,检查http://pastebin.com/0eBsmbY0 我也有一些类似的脚本,但他们不使用bing.com。 – Bleron

+0

请将您的代码在线发布到Stack Overflow上,作为您的一部分问题。链接可能过时。谢谢! – FlipperPA

回答

1

这个问题可能是你的$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; 
} 
相关问题