1. Задавайте здесь вопросы о коде, которые не подходят в другие разделы, такие как:
    Дизайн > Верстка
    PHP > Как сделать на PHP
    Скрыть объявление

Perl Proxy List Filtering App на перле

Тема в разделе "Web Coding", создана пользователем sarmatik2006, 2 сен 2006.

Статус темы:
Закрыта.
Модераторы: latteo
  1. sarmatik2006

    sarmatik2006 Создатель

    Регистр.:
    26 авг 2006
    Сообщения:
    38
    Симпатии:
    21
    Для его использования, Вы должны иметь доступ к веб серверу, с которым не должно быть проблем)). Создать простой HTML файл proxytest.html с уникальной строкой в нем. Эта строка должна быть валидна перловому скрипту. Для примера ,эта команда должна сделать это:
    $ echo 'oSCZB8g6bo87N72GF' > ~/public_html/proxytest.html

    Затем загрузите этот source code на Ваш сервер, и в той же директории создайте raw текстовый файл со списком всех серверов в формате XXX.XXX.XXX:YYYY (ip address colon port), с одним сервером на строку. Затем создайте другой файл для вывода отфильтрованной инфы, good list. Сделать чтобы этот файл был chmod 777.

    #!/usr/bin/perl

    use strict;
    use warnings;

    use LWP::UserAgent;

    unless($#ARGV == 1){
    print "Usage: proxyfilter.pl INPUT_LIST OUTPUT_LIST\n";
    exit(1);
    }

    my $infile = shift;
    my $outfile = shift;

    my $url = "http://your-web-server/proxytest.html"; # url to check against val str
    my $valstr = "oSCZB8g6bo87N72GF\n"; # validation string (usually ends in \n)
    my $timeout = 5; # seconds to wait for response before moving on

    my $ua = LWP::UserAgent->new( agent => 'Mozilla/5.0' );
    $ua->timeout($timeout);

    # Loop through input list
    open(RAW, $infile);
    open(GOODLIST, ">" . $outfile);
    while(<RAW>){
    chomp;
    next if(!$_);
    $ua->proxy(['http'], "http://$_");

    print "Testing proxy $_...\n";
    my $response = $ua->get($url);

    next if(!$response->is_success);
    next if($response->content ne $valstr);

    print " -- Adding good proxy: $_\n";

    print GOODLIST "$_\n";
    }
    close(GOODLIST);
    close(RAW);

    print "Done!";

    Добавлено через 24 минуты
    Да чуть не забыл)))

    Много-поточный чекер проксей на перле

    #!/usr/bin/perl
    # [SA]proxycheck, многопоточный чекер проксей
    #
    # Использование:
    # ./sa-proxycheck.pl --input=in.txt --output=out.txt [--url=http://your/proxytest.php] [--threads=100]
    #
    # Пример: ./sa-proxycheck.pl -i rawlist.txt -o goodlist.txt
    #
    #
    # берет входящий списокпроксей и:
    # - запросы к скрипту в текущий момент
    # - проверяет результат (время ввода кодировано base64)
    # - сохраняет выходные данные(результаты)
    #
    # uses Thread::pool for fast results

    # по умолчанию URL используемый для запросов (можно установить такой)
    our $testurl = "http://www.your-web-server-here.com/proxytest.php";

    # модули которые мы используем
    use strict;
    use Getopt::Long;
    use Date::Format;
    use Thread::pool;
    use LWP::UserAgent;
    use HTTP::Request::Common qw(POST);
    use MIME::Base64;

    # опции коммандной строки
    my $input = "";
    my $output = "";
    my $threads = 100;
    GetOptions (
    'input|i=s' => \$input
    ,'output|o=s' => \$output
    ,'threads|t=i' => \$threads
    ,'url|u=s' => \$testurl
    );

    die ("Использование: ./sa-proxycheck.pl --input=in.txt --output=out.txt [--url=http://your/proxytest.php] [--threads=100]\n") if $input eq "" || $output eq "";

    # Проверка файла входящих данных
    die ("Input file \"$input\" not found!\n") unless -e $input;

    # Очистка output файла, установка header
    open(OUT, ">$output") or die ("Невозможно открыть \"$output\" для входного файла");
    my $gentime = time2str("%c", time);
    print OUT "# Generated at $gentime by [SA]proxycheck \n";
    close OUT;

    print "Using $testurl for proxy checking...\n";
    print "Starting $input -> $output job with $threads workers:\n";
    my %resolved : shared;
    my $pool = Thread::pool->new(
    {
    workers => $threads,
    do => \&do,
    monitor => \&monitor,
    }
    );

    open(IN, $input);
    while(my $line = <IN>)
    {
    chomp $line;
    $pool->job($line);
    }

    # проверка прокси
    # IN: 1 proxy to check (ip:port)
    sub do {
    my $testproxy = shift;

    # build the LAWP request
    my $ua = new LWP::UserAgent;
    $ua->timeout(10);
    $ua->agent("Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.4) Gecko/20060508 Firefox/1.5.0.4");
    $ua->proxy(['http'] => 'http://' . $testproxy);

    my $verify = time;
    my $req = POST $testurl, [ check => "$verify"];
    my $res = $ua->request($req);

    if ($res->is_success)
    {

    my $content = $res->content;
    (my $security, my $type) = split("\t", decode_base64($content));

    $security = decode_base64($security);
    $type = decode_base64($type);

    if($verify == $security && $type eq "strong")
    {
    print "$testproxy\tFOUND PROXY\n";
    return $testproxy;
    }
    else {
    print "$testproxy\tsecurity failed: $verify != $security or bad type $type\n";
    return 0;
    }
    }
    else
    {
    print "$testproxy\tquery failed\n";
    return 0;
    }
    } #do

    #--------------------------------------------------------------------
    # IN: 1 working proxy (ip:port)

    sub monitor {
    if($_[0])
    {
    open(OUT, ">>$output");
    print OUT $_[0] . "\n";
    close OUT;
    }
    } #monitor
     
  2. darkblood

    darkblood Постоялец

    Регистр.:
    17 май 2006
    Сообщения:
    132
    Симпатии:
    44
    прикольно код со смайликами :D
     
  3. sarmatik2006

    sarmatik2006 Создатель

    Регистр.:
    26 авг 2006
    Сообщения:
    38
    Симпатии:
    21
    :confused:ага только заметил
    ну кому нужно сделают замену
     
Статус темы:
Закрыта.