proxy grab&check

Discussion in 'PHP' started by satana8920, 16 Oct 2007.

  1. satana8920

    satana8920 Палач Античата

    Joined:
    22 Sep 2006
    Messages:
    396
    Likes Received:
    138
    Reputations:
    6
    Народ помогите пожалуйста!
    нужен скрипт прокси граббер и чекер вместе а то я и з за этого пхп начал учить
    мне нуно кароч что б в файл мона было добавить ссылочки а скриптик выдиралл от туда их и чекал сразу а потом записывал в файл какой нить
    уже неделю тилипаюсь с этим (
     
    1 person likes this.
  2. biophreak

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

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Хм...ты хочешь написать универсальный чтоле? :) для всего?
    Для эффективного чека:
    1. Смотри что такое ProxyJudge
    2. Учись работать с SSL и соксами
    3. Учись отличать Codeen\Planetlab прокси :)
    4. Для хттп, помимо proxyjudge'a смотри за что какие HTTP заголовки отвечают :)

    Для грабинга:
    1. Учи регекспы
    2. Универсальный врядли получица, для каждого сайта - свой парсинг надо
    3. В пхп имхо траблы с мультитредовостью :) Она есть, но теряется кроссплатформенность ;)
     
  3. mR_LiNK[deface_0nl

    mR_LiNK[deface_0nl Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    147
    Likes Received:
    27
    Reputations:
    13
    Гы..
    раз такими вещами занимаешься - впервую очередь разобраться с языком pHp/Perl! Готовые решения недавно видел в "полезных скриптах". ;)

    Это, мил человек, НЕ имхо А фаКт! Хочешь многопоточность - пиши на PerL! ;)
     
    #3 mR_LiNK[deface_0nl, 16 Oct 2007
    Last edited: 16 Oct 2007
    1 person likes this.
  4. biophreak

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

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Ну да...именно это я и имел в виду :))
    Писал давно на перле проксичекер(как Cgi скрипт).
    Забросил на автоматическом определении соксов :))))

    Так что стоит несколько раз подумать, прежде чем что-то писать, ведь есть вполне достойные(правда так-же, многие, платные) скрипты\проги, которые написаны до тебя, и для таких как ты ;)
     
  5. BuH@LicH

    BuH@LicH Member

    Joined:
    6 Feb 2007
    Messages:
    13
    Likes Received:
    6
    Reputations:
    0
    satana8920, специально для тебя proxy grab&check. Подробности в комментариях
    Code:
    ######################################################
    # За основу скрипта взята работа s7r34m : Group of Freedom Search www.gfs-team.ru,
    # Отредактированная под нужды топикстартера
    ######################################################
    use FileHandle;
    use Getopt::Std;
    
    autoflush STDOUT 1;
    getopts('f:');
    printInfo();
    getProxies($opt_f);
    checkProxies();
    exit;
    
    
    #############################################
    #This function gets proxylists from internet
    #############################################
    sub getProxies
    {
        $links_file = shift;
        $num = 0;
    
        open(PROXY_LINKS, $links_file);
        @proxy_links=<PROXY_LINKS> or die print "$! ";
        close(PROXY_LINKS);
    	
        open(ALLP,">./allproxies.txt");
    
        
        #Get proxies 
        foreach $url(@proxy_links)
    	{
    		print "Getting proxies from $url ... ";
    		chomp($url);
    		$s=getPage($url);
    		# Данное регулярное выражение подходит только для страниц, на которых прокси сервера соотеветствуют маске: ip:port,
    		# Например, http://www.freeproxy.ru./download/lists/goodproxy.txt
    		# Для другого случая пишешь свою регулярку.
    		while($s=~/(\d*\.\d*\.\d*\.\d*)\:(\d*)/msgi) 
    		{
    			print ALLP $1.":".$2."\n";
    			$num++;
    		}
    		print "done\n";
    	}
    
        print "\n".$num." proxies found\n\n";
        close ALLP;
    }
    
    
    
    ################################
    #This function checks proxylist
    ################################
    sub checkProxies
    {
        use threads;
        use threads::shared;
    
        $threadsNumber=64;
        print "Checking proxies... ";
        share(@flags);
        open(ALLP,"<./allproxies.txt");
    
        #creating threads
        for($i=0;$i<$threadsNumber;$i++)
        {
            threads->create("myThread",$i);
            $flags[$i]="nothing";
        }
        foreach $thr(threads->list)
        {
            $thr->detach;
        }
    
        #main loop
        #searches for unoccupied thread
        #and gives it a work
        $num=0;
        while($proxy=<ALLP>)
        {
            $num++;
            print "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
            print "Checking proxies... ".$num;
            $current=0;
            while()
            {
                if($flags[$current] eq "nothing")
                {
                    $flags[$current]=$proxy;
                    last;
                }
                if($flags[$current] eq "good")
                {
                    $flags[$current]=$proxy;
                    $goodNumber++;
                    last;
                }
                $current++;
                if($current==$threadsNumber-1) {$current=0;}
            }
        }
    
        #checking finished
        #now we may kill all threads
        $i=0;
        while($i<$threadsNumber)
        {
            if($flags[$i] eq "nothing")
            {
                $flags[$i]="finish";
            }
            if($flags[$i] eq "good")
            {
                $flags[$i]="finish";
                $goodNumber++;
            }
            if($flags[$i] eq "finished")
            {
                $i++;
            }
        }
        close ALLP;
        print "\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b\b";
        print "Checking proxies... finished\n";
        print $goodNumber." eleet proxies found\n";
    
        sleep(1);
    }
    
    ########
    #Thread
    ########
    sub myThread
    {
        while()
        {
            sleep(1);
            if($flags[$_[0]] eq "finish") {last;}
            if($flags[$_[0]] eq "nothing") {next;} #wait for task
            if($flags[$_[0]] eq "good") {next;} #wait for task
            $proxy=$flags[$_[0]];
            $result=testProxy($proxy);
            if($result==1)
            {
                open(ELEET,">>./eleet.txt");
                print ELEET $proxy;
                close ELEET;
                $flags[$_[0]]="good";
            } else {
                $flags[$_[0]]="nothing";
            }
        }
        $flags[$_[0]]="finished";
    }
    
    
    ###########################
    #This function tests proxy
    ###########################
    sub testProxy
    {
          $env="http://nntime.com/textenv.pl";
          #$env="http://samair.ru/cgi/textenv.pl"
    
          $s=getPage($env,"http://".$_[0]);
          ($adr,$port)=split(/:/,$_[0]);
          if($s!~/REMOTE_ADDR=$adr/) {return 0}; #bad or transparent proxy
          if($s=~/HTTP_VIA/) {return 0;} #anonymous or transparent proxy
          if($s=~/HTTP_X_FORWARDED_FOR/) {return 0;} #anonymous or transparent proxy
          return 1; #eleet proxy
    }
    
    
    
    ####################################################
    #This function prints information about the program
    ####################################################
    sub printInfo
    {
        print "*********************************************\n";
        print "Usage:\n";
        print "$0 -f file_with_links.txt:\n";
        print "*********************************************\n\n";
    }
    
    
    #################################
    #This functon makes HTTP request
    #################################
    sub getPage
    {
        use LWP::UserAgent;
        $ua=LWP::UserAgent->new;
    
        $ua->proxy(http=>$_[1]);
        $ua->timeout(10);
    
        $ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
        $req=HTTP::Request->new(GET=>$_[0]);
    
        $res=$ua->request($req);
    
        if($res->is_success)
        {
            return $res->content;
        }
    }
    
     
  6. Cawabunga

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

    Joined:
    16 Apr 2007
    Messages:
    359
    Likes Received:
    165
    Reputations:
    -22
    Специально для него мог бы хотяб комментарии перевести на Русский =)
     
  7. satana8920

    satana8920 Палач Античата

    Joined:
    22 Sep 2006
    Messages:
    396
    Likes Received:
    138
    Reputations:
    6
    спасибо!!! я очень благодарен!!!!