Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   proxy grab&check (https://forum.antichat.xyz/showthread.php?t=51265)

satana8920 16.10.2007 00:15

proxy grab&check
 
Народ помогите пожалуйста!
нужен скрипт прокси граббер и чекер вместе а то я и з за этого пхп начал учить
мне нуно кароч что б в файл мона было добавить ссылочки а скриптик выдиралл от туда их и чекал сразу а потом записывал в файл какой нить
уже неделю тилипаюсь с этим (

biophreak 16.10.2007 01:28

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

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

mR_LiNK[deface_0nl 16.10.2007 04:44

Гы..
раз такими вещами занимаешься - впервую очередь разобраться с языком pHp/Perl! Готовые решения недавно видел в "полезных скриптах". ;)

Цитата:

Сообщение от biophreak
В пхп имхо траблы с мультитредовостью :) Она есть, но теряется кроссплатформенность ;)

Это, мил человек, НЕ имхо А фаКт! Хочешь многопоточность - пиши на PerL! ;)

biophreak 16.10.2007 10:23

Ну да...именно это я и имел в виду :))
Писал давно на перле проксичекер(как Cgi скрипт).
Забросил на автоматическом определении соксов :))))

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

BuH@LicH 18.10.2007 17:22

satana8920, специально для тебя proxy grab&check. Подробности в комментариях
Код:

######################################################
# За основу скрипта взята работа 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;
    }
}


Cawabunga 18.10.2007 17:38

Цитата:

satana8920, специально для тебя proxy grab&check. Подробности в комментариях
Специально для него мог бы хотяб комментарии перевести на Русский =)

satana8920 18.10.2007 17:42

спасибо!!! я очень благодарен!!!!


Время: 12:03