2015-09-06 132 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; 
} 
相關問題