Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- if ($_GET['action']!=='search'){
- ?><form>
- Возраст: <input name="min_age" title="Минимальный возраст">—<input name="max_age" title="Максимальный возраст"><br>
- Пол: <select name="gender">
- <option value="0" selected>Любой</option>
- <option value="1">Мужчина</option>
- <option value="2">Женщина</option>
- </select>
- Страна: <select name="country">
- <option value="0" selected>Любая</option>
- <option value='24'>Россия</option>
- <option value='81'>Азербайджан</option>
- <option value='82'>Армения</option>
- <option value='97'>Афганистан</option>
- <option value='96'>Бангладеш</option>
- <option value='99'>Бахрейн</option>
- <option value='100'>Бруней-Даруссалам</option>
- <option value='101'>Бутан</option>
- <option value='102'>Вьетнам</option>
- <option value='83'>Грузия</option>
- <option value='86'>Израиль</option>
- <option value='95'>Индия</option>
- <option value='103'>Индонезия</option>
- <option value='79'>Иордания</option>
- <option value='85'>Ирак</option>
- <option value='87'>Иран</option>
- <option value='104'>Йемен</option>
- <option value='84'>Казахстан</option>
- <option value='105'>Камбоджа</option>
- <option value='106'>Катар</option>
- <option value='107'>Кипр</option>
- <option value='92'>Киргизия (Кыргызстан)</option>
- <option value='76'>Китай</option>
- <option value='3215'>Кокосовые острова (Австр.)</option>
- <option value='29'>Корея (КНДР)</option>
- <option value='108'> Республика</option>
- <option value='88'>Кувейт</option>
- <option value='109'>Лаос</option>
- <option value='110'>Ливан</option>
- <option value='111'>Малайзия</option>
- <option value='112'>Мальдивы</option>
- <option value='113'>Монголия</option>
- <option value='114'>Мьянма</option>
- <option value='115'>Непал</option>
- <option value='116'>Объединенные Арабские Эмираты</option>
- <option value='117'>Оман</option>
- <option value='3216'>Остров Рождества (Австр.)</option>
- <option value='122'>Пакистан</option>
- <option value='89'>Палестина</option>
- <option value='94'>Саудовская Аравия</option>
- <option value='118'>Сингапур</option>
- <option value='78'>Сирия</option>
- <option value='91'>Таджикистан</option>
- <option value='119'>Таиланд</option>
- <option value='120'>Тайвань</option>
- <option value='132'>Тимор</option>
- <option value='90'>Туркмения</option>
- <option value='77'>Турция</option>
- <option value='93'>Узбекистан</option>
- <option value='121'>Филиппины</option>
- <option value='98'>Шри Ланка</option>
- <option value='75'>Япония</option>
- <option value='123'>Австралия</option>
- <option value='454'>Американское Самоа</option>
- <option value='124'>Вануату</option>
- <option value='453'>Гуам (США)</option>
- <option value='126'>Кирибати</option>
- <option value='127'>Маршалловы Острова</option>
- <option value='128'>Микронезия (Федеративные Штаты Микронезии)</option>
- <option value='129'>Науру</option>
- <option value='3220'>Ниуэ (Н.Зел.)</option>
- <option value='130'>Новая Зеландия</option>
- <option value='3218'>Новая Каледония (Фр.)</option>
- <option value='3221'>Острова Кука (Н.Зел.)</option>
- <option value='3230'>Острова Херд и Макдональд (Австр.)</option>
- <option value='131'>Палау</option>
- <option value='133'>Папуа - Новая Гвинея</option>
- <option value='3222'>Питкерн (Брит.)</option>
- <option value='125'>Самоа</option>
- <option value='3219'>Сев. Марианские острова (США)</option>
- <option value='134'>Соломоновы Острова</option>
- <option value='3223'>Токелау (Н.Зел.)</option>
- <option value='135'>Тонга</option>
- <option value='136'>Тувалу</option>
- <option value='3224'>Уоллис и Футуна острова (Фр.)</option>
- <option value='137'>Фиджи</option>
- <option value='3226'>Французская Полинезия</option>
- <option value='3225'>Французские Южные территории</option>
- <option value='138'>Канада</option>
- <option value='139'>США</option>
- <option value='3200'>Ангилья (Брит.)</option>
- <option value='140'>Антигуа и Барбуда</option>
- <option value='141'>Аргентина</option>
- <option value='3202'>Аруба (Нид.)</option>
- <option value='142'>Багамы</option>
- <option value='143'>Барбадос</option>
- <option value='146'>Белиз</option>
- <option value='3203'>Бермуды (Брит.)</option>
- <option value='144'>Боливия</option>
- <option value='145'>Бразилия</option>
- <option value='147'>Венесуэла</option>
- <option value='3204'>Виргинские острова (Брит.)</option>
- <option value='452'>Виргинские острова (США)</option>
- <option value='149'>Гаити</option>
- <option value='148'>Гайана</option>
- <option value='3205'>Гваделупа (Фр.)</option>
- <option value='173'>Гватемала</option>
- <option value='150'>Гондурас</option>
- <option value='151'>Гренада</option>
- <option value='152'>Гренландия (Дат.)</option>
- <option value='153'>Доминика</option>
- <option value='154'>Доминиканская Республика</option>
- <option value='155'>Колумбия</option>
- <option value='156'>Коста-Рика</option>
- <option value='157'>Куба</option>
- <option value='3208'>Мартиника (Фр.)</option>
- <option value='158'>Мексика</option>
- <option value='3209'>Монтсеррат (Брит)</option>
- <option value='3201'>Нидерландские Антилы</option>
- <option value='159'>Никарагуа</option>
- <option value='3207'>Остров Кайман (Брит.)</option>
- <option value='3211'>Острова Теркс и Кайкос (Брит.)</option>
- <option value='160'>Панама</option>
- <option value='161'>Парагвай</option>
- <option value='162'>Перу</option>
- <option value='163'>Сальвадор</option>
- <option value='164'>Сент-Винсент и Гренадины</option>
- <option value='165'>Сент-Китс и Невис</option>
- <option value='166'>Сент-Люсия</option>
- <option value='3210'>Сент-Пьер и Микелон (Фр.)</option>
- <option value='167'>Суринам</option>
- <option value='168'>Тринидат и Тобаго</option>
- <option value='169'>Уругвай</option>
- <option value='3212'>Фолклендские острова (Брит.)</option>
- <option value='3206'>Французская Гвиана</option>
- <option value='170'>Чили</option>
- <option value='171'>Эквадор</option>
- <option value='3213'>Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)</option>
- <option value='172'>Ямайка</option>
- <option value='174'>Алжир</option>
- <option value='175'>Ангола</option>
- <option value='176'>Бенин</option>
- <option value='177'>Ботсвана</option>
- <option value='3228'>Британская территория в Индийском океане</option>
- <option value='178'>Буркина-Фасо</option>
- <option value='179'>Бурунди</option>
- <option value='180'>Габон</option>
- <option value='181'>Гамбия</option>
- <option value='182'>Гана</option>
- <option value='183'>Гвинея</option>
- <option value='184'>Гвинея-Бисау</option>
- <option value='185'>Джибути</option>
- <option value='186'>Египет</option>
- <option value='187'>Замбия</option>
- <option value='3198'>Зап. Сахара</option>
- <option value='23'>Зимбабве</option>
- <option value='188'>Кабо-Верде</option>
- <option value='189'>Камерун</option>
- <option value='190'>Кения</option>
- <option value='191'>Коморы</option>
- <option value='193'>Конго (Заир)</option>
- <option value='192'> Республика</option>
- <option value='194'>Кот-д`Ивуар</option>
- <option value='195'>Лесото</option>
- <option value='196'>Либерия</option>
- <option value='197'>Ливия</option>
- <option value='198'>Маврикий</option>
- <option value='199'>Мавритания</option>
- <option value='200'>Мадагаскар</option>
- <option value='3229'>Майотт (Фр.)</option>
- <option value='201'>Малави</option>
- <option value='202'>Мали</option>
- <option value='203'>Марокко</option>
- <option value='204'>Мозамбик</option>
- <option value='205'>Намибия</option>
- <option value='206'>Нигер</option>
- <option value='207'>Нигерия</option>
- <option value='3227'>Остров Буве (Норв.)</option>
- <option value='3197'>Реюньон (Фр.)</option>
- <option value='208'>Руанда</option>
- <option value='209'>Сан-Томе и Принсипи</option>
- <option value='210'>Свазиленд</option>
- <option value='3199'>Святая Елена (Брит.)</option>
- <option value='211'>Сейшелы</option>
- <option value='212'>Сенегал</option>
- <option value='213'>Сомали</option>
- <option value='214'>Судан</option>
- <option value='215'>Сьерра-Леоне</option>
- <option value='216'>Танзания</option>
- <option value='217'>Того</option>
- <option value='218'>Тунис</option>
- <option value='219'>Уганда</option>
- <option value='220'>Центральноафриканская Республика</option>
- <option value='222'>Чад</option>
- <option value='223'>Экваториальная Гвинея</option>
- <option value='221'>Эритрея</option>
- <option value='224'>Эфиопия</option>
- <option value='225'>Южно-Африканская Республика (ЮАР)</option>
- <option value='39'>Украина</option>
- <option value='40'>Австрия</option>
- <option value='32'>Албания</option>
- <option value='33'>Андорра</option>
- <option value='340'>Белоруссия</option>
- <option value='38'>Бельгия</option>
- <option value='41'>Болгария</option>
- <option value='42'>Босния и Герцеговина</option>
- <option value='43'>Ватикан</option>
- <option value='45'>Великобритания</option>
- <option value='44'>Венгрия</option>
- <option value='46'>Германия</option>
- <option value='3193'>Гернси (Брит.)</option>
- <option value='47'>Гибралтар (Брит.)</option>
- <option value='48'>Греция</option>
- <option value='49'>Дания</option>
- <option value='3194'>Джерси (Брит.)</option>
- <option value='50'>Ирландия</option>
- <option value='51'>Исландия</option>
- <option value='34'>Испания</option>
- <option value='52'>Италия</option>
- <option value='53'>Латвия</option>
- <option value='54'>Литва</option>
- <option value='55'>Лихтенштейн</option>
- <option value='56'>Люксембург</option>
- <option value='57'>Македония</option>
- <option value='58'>Мальта</option>
- <option value='59'>Молдавия</option>
- <option value='36'>Монако</option>
- <option value='60'>Нидерланды</option>
- <option value='61'>Норвегия</option>
- <option value='3195'>Остров Мэн (Брит.)</option>
- <option value='62'>Польша</option>
- <option value='35'>Португалия</option>
- <option value='63'>Румыния</option>
- <option value='64'>Сан-Марино</option>
- <option value='74'>Сербия и Черногория</option>
- <option value='65'>Словакия</option>
- <option value='66'>Словения</option>
- <option value='67'>Фарерские о-ва (Дания)</option>
- <option value='68'>Финляндия</option>
- <option value='37'>Франция</option>
- <option value='69'>Хорватия</option>
- <option value='70'>Чехия</option>
- <option value='71'>Швейцария</option>
- <option value='72'>Швеция</option>
- <option value='3196'>Шпицберген (Норв.)</option>
- <option value='73'>Эстония</option>
- </select>
- <input type="hidden" name="action" value="search"><br>
- В сети: <input type="checkbox" name="online" value="1"><br>
- <input type="submit" value="Ищем">
- </form><?php
- exit;
- }
- #логин (в виде адрес@домен.ру) и пароль вставляйте сюда!
- $login ='';
- $password ='';
- #$agent_ver='client="magent" version="5.6" build="3396"';
- $agent_ver='MPPMailGrabber/0.0.1';
- #функции
- function A2S2($ar){
- $buf='';
- for ($i=0;$i<count($ar);$i++){
- if (gettype($ar[$i])=='string'){$buf.=$ar[$i];}else{$buf.=chr($ar[$i]);}
- }
- return $buf;
- }
- function A2S($ar, $seq, $msg){
- $buf =A2S2(array(0xEF,0xBE,0xAD,0xDE,0x15,0x00,0x01,0x00));#magic & текущая версия протокола
- $buf1=A2S2($ar);
- $buf.=write_uidl($seq); #пишем seq
- $buf.=write_uidl($msg); #пишем msg
- $buf.=write_uidl(strlen($buf1));#пишем длину запроса
- for ($i=1;$i<=(4+20);$i++){$buf.=chr(0);}#пустые поля
- return $buf.$buf1;
- }
- function read_uidl($ar,$offset){
- return ord($ar[$offset]) |
- (ord($ar[$offset+1])<<8) |
- (ord($ar[$offset+2])<<16) |
- (ord($ar[$offset+3])<<24);
- }
- function write_uidl($num){
- $buf='';
- for ($i=1;$i<=4;$i++){
- $buf.=chr($num & 0xFF);
- $num =$num>>8;
- }
- return $buf;
- }
- #Код
- error_reporting(~E_ALL);
- $fp_m = fsockopen("mrim.mail.ru", 2042, $errno, $errstr, 10);
- if (!$fp_m){
- echo "Ошибка: <b>$errstr</b>";
- exit;
- }
- $buf=fgets($fp_m);
- if (!preg_match('|([0-9.]+):([0-9]{1,5})|',$buf,$a)){echo 'Неправильный ответ от сервера';exit;}
- echo 'Сервер приказал соединяться с <b>'.$a[0].'</b><br>';flush();
- fclose($fp_m);
- $fp = fsockopen($a[1], $a[2], $errno, $errstr, 10);
- if (!$fp){
- echo "Ошибка: <b>$errstr</b>";
- exit;
- }
- $buf=A2S(array(),0x01,0x1001);
- fwrite($fp,$buf);
- $buf=fread($fp,512);
- if (read_uidl($buf,0xC)!==0x1002){
- echo 'Зайти не получилось';
- exit;
- }
- $ping_inter=read_uidl($buf,0x2C);
- $buf =write_uidl(strlen($login));
- $buf.=$login;
- $buf.=write_uidl(strlen($password));
- $buf.=$password;
- $buf.=write_uidl(0xFFFFFFFF);
- $buf.=write_uidl(strlen($agent_ver)).$agent_ver;
- #А вот здесь начинаются недокументированные изменения в протоколе
- $buf.=write_uidl(02).'ru';
- $buf.=write_uidl(16).write_uidl(01).write_uidl(08).'geo-list';
- $buf.=write_uidl(21).'MRA 5.6 (build 3396);';
- #запаковываем всё
- $buf=A2S(array($buf),0x02,0x1078);
- fwrite($fp,$buf);
- $buf=fread($fp,10240);
- $num=read_uidl($buf,0x0C);
- if ($num==4101){
- #ошибка при заходе
- $len=read_uidl($buf,0x10);
- $err=substr($buf,0x30,$len);
- echo "Ошибка при заходе: <b>$err</b>";
- exit;
- }
- if ($num!==4100){
- #ошибка при заходе
- echo "Опять протокол изменили?";
- exit;
- }
- sleep(1);
- #меняем статус
- $buf=array(0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
- 0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x31,
- 0x0C, 0x00, 0x00, 0x00, 0x1E, 0x04, 0x3D, 0x04,
- 0x3B, 0x04, 0x30, 0x04, 0x39, 0x04, 0x3D, 0x04,
- 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF);
- $buf=A2S($buf,0x03,0x1022);
- fwrite($fp,$buf);
- #с этого момента мы в сети
- echo 'Мы зашли<br>';flush();
- sleep(10);#сразу после захода на сервер искать всё равно нельзя, подождём
- $pac_num =4; #номер пакета
- $ping_last=0; #дата последнего пинга
- $mails=array();#список найденных адресов
- ini_set("max_execution_time",2*60*60); #ну, двух часов нам хватит
- do{
- #проверяем нужен ли пинг
- if ($ping_last+$ping_inter<time()){
- $buf=A2S(array(),$pac_num++,0x1006);
- fwrite($fp,$buf);
- $ping_last=time();
- }
- stream_set_blocking($fp,0);
- fread($fp,10240);
- stream_set_blocking($fp,1);
- usleep(250000);
- $buf='';
- #пол
- if (($_GET['gender']=='1')or($_GET['gender']=='2')){$buf.=write_uidl(0x05).write_uidl(0x01).$_GET['gender'];}
- #мин. возраст
- if (($_GET['min_age']>10)and($_GET['min_age']<100)){$buf.=write_uidl(0x07).write_uidl(strlen($_GET['min_age'])).$_GET['min_age'];}
- #макс. мозраст
- if (($_GET['max_age']>10)and($_GET['min_age']<100)){$buf.=write_uidl(0x08).write_uidl(strlen($_GET['max_age'])).$_GET['max_age'];}
- #страна
- if ($_GET['country']>0){$buf.=write_uidl(0x0B).write_uidl(strlen($_GET['country'])).$_GET['country'];}
- #онлайн
- if ($_GET['online']=='1'){$buf.=write_uidl(0x09).write_uidl(0x01).' ';}
- #запаковываем и отправляем
- $buf =A2S(array($buf),$pac_num++,0x1029);
- fwrite($fp,$buf);
- $buf =fread($fp,0x2C);
- $j =read_uidl($buf,0x10);#получаем длину пакета
- $buf =fread($fp,$j);
- $code=read_uidl($buf,0x00);#получаем длину пакета
- if ($code==0){echo '<b>Не найдено</b><br>';}
- if ($code==2){
- #таймаут
- sleep(15);
- }
- if ($code==1){
- #Ура, пользователи найдены
- #есть большая вероятность, что с первого раза получен не весь пакет
- while ($j>strlen($buf)){
- $buf1=fread($fp,$j-strlen($buf));
- if ($buf1==''){echo '<b>disconnected</b>';exit;}
- $buf.=$buf1;
- }
- unset($buf1);
- $field_num=read_uidl($buf,0x04);#кол-во полей
- $found =read_uidl($buf,0x08);#кол-во найденных записей
- $f_l =array("username"=>0, "domain"=>0);#ссылки на нужные поля
- $offset =0x10;
- #перебираем все поля
- for ($i=1;$i<=$field_num;$i++){
- $l=read_uidl($buf,$offset);
- $s=substr($buf,$offset+4,$l);
- if (strcasecmp($s, 'username')==0){$f_l['username']=$i;}
- if (strcasecmp($s, 'domain') ==0){$f_l['domain'] =$i;}
- $offset+=4+$l;
- }
- #перебираем все вхождения
- $mails=array();
- for ($i=1;$i<=$found;$i++){
- $m_t=array("username"=>'', "domain"=>'');
- for ($j=1;$j<=$field_num;$j++){
- $l=read_uidl($buf,$offset);
- if ($f_l['username']==$j){
- $s=substr($buf,$offset+4,$l);
- $m_t['username']=$s;
- }
- if ($f_l['domain']==$j){
- $s=substr($buf,$offset+4,$l);
- $m_t['domain']=$s;
- }
- $offset+=4+$l;
- }
- $mail=$m_t['username'].'@'.$m_t['domain'];
- echo $mail.'<br>';
- #добавляем адрес, что бы не показывать его n-ный раз
- $u=false; for ($j=0;$j<count($mails);$j++){
- if ($mails[$j]==$mail){$u=true;break;}
- }
- if (!$u){$mails[count($mails)]=$mail;}
- }#for $i=1;
- flush();
- }
- if ($found<50){break;}#кол-во найденных записей всегда 50, если меньше, значит это всё, что можно было достать
- #не надо слишком быстро искать, подождём
- sleep(5);
- } while (true);
- fclose($fp);
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement