[Perl] Небольшой доркер

Discussion in 'PHP' started by biophreak, 8 Jul 2008.

  1. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Для собственных нужд был написан небольшой гугл-доркер, ибо руками гугл парсить не очень удобно :))
    Все существующие под нужды не подходили, может еще кому пригодится :)
    Никаких тред, проксей там нету, ибо для одного раза нужно было ))
    Code:
    #!/usr/bin/perl -s
    use LWP::UserAgent;
    use strict;
    use warnings;
    use diagnostics;
    my @uas = (
     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.3) Gecko/20070309 Firefox/2.0.0.4",
     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.4) Gecko/20070309 Firefox/2.0.0.5",
     "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.2) Gecko/20070309 Firefox/2.0.0.3"
    );
    $| = 1;
    my($logfile,$ua,$page,$url,$response,$con,$results,$dorksfile,@dorks);
    
    $ua = LWP::UserAgent->new;
    $ua->timeout(30);
    
    sub usage{
     exit print qq(Usage:
     $0 <dorks file> <logs file> [number of results](optional, defaul=100)
     $0 dorks.txt results.log\n\n);
    }
    
    $dorksfile = shift || usage();
    $logfile = shift || usage();
    $results = shift || 100;
    
    open my $DF, '<', $dorksfile or die "Cant open dorks file $dorksfile: $!\n";
    open my $LOG,'>>', $logfile or die "Cant open: $!\n";
    foreach(<$DF>)
    {
        $_ =~ s/\s+$//go;
        $_ =~ s/\s+|\t+/+/go;
        $_ =~ s/\n|\r//go;
        print "[Searching dork: $_]\n";
        $ua->agent($uas[rand $#uas]);
        dorkie($_);
    }
    close $DF;
    
    sub dorkie
    {
    	my $dork = shift;
    	$response = $ua->get("http://www.google.com.au/search?hl=en&num=".$results."&q=".$dork."&start=0") or die "Cant get Google's contents: $!\n";
    	print $LOG "[Dork: $dork]\n";
    	if($response->is_success)
    	{
    	    $con = $response->content;
    	    while ($con =~ m/<h2 class=(.*?)><a href=\"(.*?)\" class=(.*?)>/goi)
    	    {
    		my $url = $2;
    		$url = "http://".$1 if($url =~ m/http:\/\/(.*)\"(.*)/goi);
    		print $LOG "$url\n";
    		
    	    }
    	} else 
    	{
    	    if($response->status_line =~ m/403/)
    	    {
    		print $LOG "[-] Forbidden\n";
    		return 0;
    	    } else
    	    {
    		print $LOG "[-] Cannot connect\n";
    		return 0;
    	    }
    	}
    	print $LOG "[End of dork: $dork]\n\n"
    }
    close($LOG)
    
    UPD: Добавил рандомизатор юзерагентов, при желании список пополнить можно. Хотя против гугла - это как против танка тапок, но все же :))
     
    #1 biophreak, 8 Jul 2008
    Last edited: 8 Jul 2008
    2 people like this.
  2. Chaak

    Chaak Elder - Старейшина

    Joined:
    1 Jun 2008
    Messages:
    1,059
    Likes Received:
    1,067
    Reputations:
    80
    А для чего он нужен?
     
  3. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Знаешь что такое Google Dorks?
    Так вот, в файл пишешь эти самые дорки(каждый - на новой строке), например "Powered by Invision Power Board", доркер обращается к гуглу с этим самым запросом и сохраняет в файл результаты поиска(урлы тоесть), которые содержат строку "Powered by Invision Power Board".
    Так же можно юзать встроенный "язык запросов" гугла, типа "site:" - поиск по сайту, "intitle:" - поиск строки в заголовке, и так далее, про язык запросов на самом гугле можно прочиать, ссылку не помню, к сожалению :)