PDA

Просмотр полной версии : Регистрация Liex.ru на perl


winflip
08.11.2009, 13:51
Я пишу скрипт реги этого сайта на perle(это не важно). Отпраляю методом POST следующее:

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ом всё в порядке, а это защита от авторегистраций.

Kaimi
08.11.2009, 14:15
Нет там защиты

winflip
08.11.2009, 14:26
Я точно не знаю, но там ajax запросы идут с установкой cookie, я плохо в js разбираюсь, поэтому и попросил посмотреть, в любом случае спасибо, только вот что с e-mail делать? Я отсылаю этот запрос, получаю JSESSIONID(идентификатор сессии) и location=Error2.jsp, иду с ним в liex.ru/Error2.jsp, он пишет мол плохой e-mail.

Pashkela
08.11.2009, 14:43
email из фалика цепляй или пропиши так:

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

@ - зарезервированный символ в perl (для массивов)

winflip
08.11.2009, 14:49
Я в курсе, я в одинарные кавычки заключил.
$email = 'gena@yandex.ru';

winflip
08.11.2009, 14:52
У меня идёт скрипт print $socket "POST/......";
Я $socket убрал и скопировал сюда, поэтому что в первом скрипте то и отправляется

winflip
08.11.2009, 15:38
Что я загадками говорю??))) Вот код:
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; И код, использующий этот класс:
#!/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");

winflip
08.11.2009, 22:03
Что, никто не знает?? Я уже несколько форумов переспрашивал(((

krypt3r
08.11.2009, 22:14
use LWP::UserAgent;

winflip
08.11.2009, 22:25
use LWP::UserAgent;
А в чём разница?? В чём смысл???

krypt3r
08.11.2009, 23:25
Зачем юзать сокеты, когда есть LWP?

krypt3r
09.11.2009, 08:55
#!/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;

winflip
09.11.2009, 15:19
Спасибо, в принципе и код короче становиться