Регистрация Liex.ru на perl

Discussion in 'PHP' started by winflip, 8 Nov 2009.

  1. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Я пишу скрипт реги этого сайта на perle(это не важно). Отпраляю методом POST следующее:
    Code:
    POST /userAction?action=registerUser HTTP/1.0
    Host: www.liex.ru
    Referer: http://www.liex.ru/Registration.jsp
    User-Agent: liexAPI/0.9
    Cookie: Referrer=14834; JSESSIONID=oy5n08f8r1uz;
    Content-Type: multipart/form-data; boundary="Asrf456BGe4h"
    Content-Length: 751
    Connection: keep-alive
    Keep-Alive: 300
    
    
    --Asrf456BGe4h
    Content-Disposition: form-data; name="name"
    
    Gena
    --Asrf456BGe4h
    Content-Disposition: form-data; name="login"
    
    testliex
    --Asrf456BGe4h
    Content-Disposition: form-data; name="email"
    
    gena@yandex.ru
    --Asrf456BGe4h
    Content-Disposition: form-data; name="password"
    
    123456543
    --Asrf456BGe4h
    Content-Disposition: form-data; name="password2"
    
    123456543
    --Asrf456BGe4h
    Content-Disposition: form-data; name="wmz"
    
    Z123456789012
    --Asrf456BGe4h
    Content-Disposition: form-data; name="defaultInterface"
    
    1
    --Asrf456BGe4h
    Content-Disposition: form-data; name="Submit2_x"
    
    12
    --Asrf456BGe4h
    Content-Disposition: form-data; name="Submit2_y"
    
    5
    --Asrf456BGe4h
    Content-Disposition: form-data; name="term"
    
    on
    --Asrf456BGe4h--
    
    
    
    Submit2_x(y) беру randomom, сервер возвращает ошибку(плохой e-mail), хотя при отправке через форму всё тип-топ. Если не сложно посмотрите что не так, и ещё там может какая защита стоит в js файле тоже гляньте)))Заранее благодарю.
    http://www.liex.ru/Registration.jsp - регистрация, форма
    http://www.liex.ru/js/validate.js - js файл
    Кстати я предполагаю, что может быть с e-mailом всё в порядке, а это защита от авторегистраций.
     
  2. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    Нет там защиты
     
    _________________________
  3. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Я точно не знаю, но там ajax запросы идут с установкой cookie, я плохо в js разбираюсь, поэтому и попросил посмотреть, в любом случае спасибо, только вот что с e-mail делать? Я отсылаю этот запрос, получаю JSESSIONID(идентификатор сессии) и location=Error2.jsp, иду с ним в liex.ru/Error2.jsp, он пишет мол плохой e-mail.
     
  4. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    email из фалика цепляй или пропиши так:

    $email = "123";$email .= "@";$email .= "mail.ru";

    @ - зарезервированный символ в perl (для массивов)
     
    #4 Pashkela, 8 Nov 2009
    Last edited: 8 Nov 2009
  5. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Я в курсе, я в одинарные кавычки заключил.
    $email = 'gena@yandex.ru';
     
  6. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    У меня идёт скрипт print $socket "POST/......";
    Я $socket убрал и скопировал сюда, поэтому что в первом скрипте то и отправляется
     
  7. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Что я загадками говорю??))) Вот код:
    Code:
    package liex::API;
    
    use strict;
    use Carp qw(croak carp);
    use IO::Socket::INET;
    use Encode qw(from_to);
    
    our $VESRION = '0.9';
    our @EXPORT = qw();
    our @EXPORT_OK = qw();
    
    sub reg {
    	my ($class, %cnf) = @_;
    	my $page;
    	my %self = ('tech' => 0,
    				'cookie' => "");
    	Carp::croak("Options to liex::API should be key/value pairs, not hash reference") if ref($_[1]) eq 'HASH';
    	my $name = delete $cnf{'name'};
    	my $username = delete $cnf{'username'};
    	my $password = delete $cnf{'password'};
    	my $e_mail = delete $cnf{'e_mail'};
    	my $wmz = delete $cnf{'wmz'};
    	my $webmaster = delete $cnf{'webmaster'} || 1;
    	my $reflink = delete $cnf{'reflink'} || undef;
    	$reflink =~ m/http\:\/\/(www\.)?liex\.ru\/([\d\w\_\-\.]+)/i;
    	my $link = $2;
        if(!$link){
        	$link= "";
        }
        my $socket = IO::Socket::INET->new("www.liex.ru:80");
        print $socket "GET /".$link." HTTP/1.0\n
        			   Host: liex.ru\n
        			   User-Agent: liexAPI/0.9\n
        			   Accept: text/html\n
    			  	   Connection: close\n\n";
    	while(my $get = <$socket>){
    		$page .= $get;
    	}
    	if(is_tech($page)){
    		$self{'tech'} = 1;
    	} else {
    		my %cookies = get_cookies($page);
    		$socket = IO::Socket::INET->new("www.liex.ru:80");
    		print %cookies;
    		my $boundary = "Asrf456BGe4h";
    		my $data = "\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"name\"\n\n";
    		$data .= "$name\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"login\"\n\n";
    		$data .= "$username\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"email\"\n\n";
    		$data .= "$e_mail\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"password\"\n\n";
    		$data .= "$password\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"password2\"\n\n";
    		$data .= "$password\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"wmz\"\n\n";
    		$data .= "$wmz\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"defaultInterface\"\n\n";
    		$data .= "$webmaster\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"Submit2_x\"\n\n";
    		$data .= int(rand(20)/1)."\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"Submit2_y\"\n\n";
    		$data .= int(rand(25)/1)."\n";
    		$data .= "--$boundary\n";
    		$data .= "Content-Disposition: form-data; name=\"term\"\n\n";
    		$data .= "on\n";
    		$data .= "--$boundary--\n\n";
    		$page = "";
    		print $socket "POST /userAction?action=registerUser HTTP/1.0\n".
    					   "Host: www.liex.ru\n".
    					   "Referer: http://www.liex.ru/Registration.jsp\n".
    					   "User-Agent: liexAPI/0.9\n".
    					   "Cookie: Referrer=".$cookies{'Referral'}."; JSESSIONID=".$cookies{'JSESSIONID'}.";\n".
    					   "Content-Type: multipart/form-data; boundary=\"".$boundary."\"\n".
    					   "Content-Length: ".length($data)."\n".
    					   "Connection: keep-alive\n".
    					   "Keep-Alive: 300\n\n".$data;
    		while(my $get = <$socket>){
    			$page .= $get;
    		}
    		if(is_tech($page)){
    			$self{'tech'} = 1;
    		} else {
    			%cookies = get_cookies($page);
    			my $cookies;
    			foreach my $cookie(keys %cookies){
    				$cookies .= $cookie."=".$cookies{$cookie}."; ";
    			}
    			$self{'cookie'} = $cookies;
    		}
    	}
    	my $self = bless(\%self, $class);
    	return $self;
    }
    
    sub get_cookies {
    	my $_ = $_[0];
    	my %list = m/set-cookie:[\s]?([\w]+)=([\w]+)/ig;
    	return %list;
    }
    
    sub is_tech {
    	my $page = $_[0];
        from_to($page, 'cp1251', 'utf8');
        if($page =~ m/технические работы/i){
        	return 1;
        } else {
        	return 0;
        }
    }
    1;
    И код, использующий этот класс:
    Code:
    #!/usr/bin/perl
    print "Content-Type: text/html\n\n";
    use CGI::Carp qw(fatalsToBrowser);
    use strict;
    use liex::API;
    use CGI qw(:standard);
    my $object = liex::API->reg(name => "Gena",
    			        username => "testliex",
    			        password => "123456543",
    			        e_mail => 'gena@yandex.ru',
    			        wmz => "Z123456789012",
    			        webmaster => 1,
    			        reflink => "http://liex.ru/winflip.htm");
     
    #7 winflip, 8 Nov 2009
    Last edited: 8 Nov 2009
  8. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Что, никто не знает?? Я уже несколько форумов переспрашивал(((
     
  9. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    use LWP::UserAgent;
    
     
  10. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    А в чём разница?? В чём смысл???
     
  11. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Зачем юзать сокеты, когда есть LWP?
     
  12. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Code:
    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use LWP::UserAgent;
    
    $\ = "\n";
    my $url = 'http://www.liex.ru/';
    my $ua = LWP::UserAgent->new ('agent' => 'Opera');
    push @{$ua->requests_redirectable}, 'POST';
    my $req = $ua->post ($url . 'userAction?action=registerUser',
      'Host' => 'www.liex.ru', 'Referrer' => $url, 'Content_Type' => 'form-data',
      'Content' => [
        'name' => 'Cewl K0d3r',
        'login' => 'coder',
        'email' => 'nick@yandex.ru',
        'password' => 'mypassword',
        'password2' => 'mypassword',
        'wmz' => 'Z-кошель',
        'defaultInterface' => 1,
        'term' => 'on'
      ]
    );
    print $req->content;
    
     
  13. winflip

    winflip New Member

    Joined:
    13 May 2009
    Messages:
    36
    Likes Received:
    1
    Reputations:
    0
    Спасибо, в принципе и код короче становиться