Proxy exporter

Discussion in 'PHP' started by hidden, 8 May 2006.

  1. hidden

    hidden 7H3 0N3

    Joined:
    23 Apr 2006
    Messages:
    550
    Likes Received:
    332
    Reputations:
    386
    Недавно мне понадобилось много проксей, я знал несколько сайтов, с бесплатными прохи, но они были на разных страницах, в разных таблицах и по несколько шт. И я написал скрипт для их выдерания и группировки который и выкладываю. В нём занесено только 3 сайта, но экспортирует он около 1100 (не повторяющихся) проксей из них примерно 35 "high anonymity", конечно можно добавить сайты, если мало. Он их просто достаёт из таблиц но не проверяет, это можно сделать другими прогами.
    ProxyExporter.pl:
    PHP:
    #!/usr/bin/perl
    use IO::Socket;
    use 
    IO::Select;
    $log="Info about pages\n";
    @
    begins=('<tr bgcolor="#ffffff" class="text" height=10>','<tr bgcolor="white">','bgcolor="#e3e6ea"'); # Ночало каждой строки в таблице
    @xlist1=(1,2,3,4,5,1,2,3,4,5,6,7,8,9,1,2,3,4,5); # Возможные номера страниц от номера запроса
    @xlist2=(0,0,0,0,0,1,1,1,1,1,1,1,1,1,2,2,2,2,2); # Номер сайта от номера запроса из следущего масива
    @xsites=('www.proxy4free.com','www.proxz.com','www.publicproxyservers.com'); # Сайты
    @xpages=(('page','.html'),('proxz','.php'),('page','.html')); # Пары(шаблоны) страниц
    $sel=IO::Select->new;
    for(
    $n=0;$n<@xlist1;$n++){
      
    $fh=&conect($n);
      
    $sel->add($fh);
      
    $sitetype{$fh}=$n;
      print
    "New conect ($n)\n";
    }
    while(@
    ready=$sel->can_read){foreach$fh(@ready){
      
    $ret=sysread$fh,$Request,256;
      if(
    defined$cb{$fh}){
        
    $cb{$fh}.=$Request;
      }else{
        
    $cb{$fh}=$Request;
      }
      if(!
    $ret){
        print
    "$xsites[$xlist2[$sitetype{$fh}]]($xlist1[$sitetype{$fh}]):\n";
        
    $begin=$begins[$xlist2[$sitetype{$fh}]];
        
    $count=0;
        while(
    $cb{$fh}=~/$begin/ig){
          (
    $xip)=$'=~/>(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})</;
          ($xport)=$'
    =~/>(\d{2,4})</;($xflag)=$'=~/>([^<>]{4,})</;
          $proxys{"$xip:$xport"}=$xflag;
          print"$xip:$xport\n";
          $count++;
        }
        $log.="$xsites[$xlist2[$sitetype{$fh}]]($xlist1[$sitetype{$fh}])=$count\n";
        undef$cb{$fh};
        $sel->remove($fh);
        close$fh;
      }
    }}
    print"End\n$log";
    open(HOUT,">HighProxy.txt");open(EOUT,">ElseProxy.txt"); # HighProxy.txt, ElseProxy.txt - Результаты
    while(($proxy,$flag)=each%proxys){
      if($flag=~/high anonymity/i){print HOUT"$proxy\n";}else{print EOUT"$proxy\n";}
    }
    close(EOUT);close(HOUT);
    sub conect{local($num)=@_;
      $page=$xlist2[$num]*2;$page=$xpages[$page].$xlist1[$num].$xpages[$page+1];
      $server=$xsites[$xlist2[$num]];
      TRY:{
        $s=IO::Socket::INET->new(PeerAddr=>$server,PeerPort=>80);
        if($s){
          print $s "GET \/$page HTTP/1.1\nHost: $server\nAccept: */*\nUser-Agent: Internet Explorer 6.0\nConnection: Keep-Alive\n\n";
          return$s;
        }
      }
      return 0;
    }
     
  2. jagga_man

    jagga_man New Member

    Joined:
    31 Mar 2006
    Messages:
    5
    Likes Received:
    0
    Reputations:
    0
    Возможно тебя заинтересует реализация этой же идеи грабера проксей под Никсы на перле.

    PHP:
    #!/usr/bin/perl -w

    # Declare modules
    use LWP::Simple;
    use 
    HTML::TableExtract;

    # Local Variables
    my $url_file   "url.list";
    my $proxy_file "proxy.list";


    open URL,  "<$url_file";
    while (<
    URL>) {
    foreach (
    $_) {
    print 
    "[+] Downloading raw proxy list: $_";
    @
    html_string get("$_");
    }
    foreach 
    $html_string (@html_string) {
    &
    parse_data($html_string);
    }
    }
    close URL;

    sub parse_data {
    open OUT,  ">>$proxy_file";
    (
    $html_string) = @_;
    print 
    "[+] Parsing data...\n";
    $te = new HTML::TableExtractheaders => [qw(Name Port)] );
    $te->parse($html_string);
    foreach 
    $row ($te->rows($table)) {
     
    my ($addr$port) = @$row;
     
    $addr =~ s/\s+//g;
     
    $port =~ s/\s+//g;
     
    if ($port =~ /\d+/) {
     print 
    OUT "$addr:$port\n";
     }
    close OUT;
    #$table = "null";
    }