Парсер мыльников на php

Предыдущие сообщения
15 июля 2012
#1 MyP3uk uid#1395 В общем вот сам парсер:
<?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>?>
      exit;
     }
     <?php
     #логин (в виде адрес@домен.ру) и пароль вставляйте сюда!
    $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);
    ?>
Для работы нужен валидный аккаунт mail.ru желательно тот который не нужен.
Парсит ~450 мыл в минуту. Материал взял отсюда.
13:11:02 1
20 июля 2012
#2 FoG uid#2288 Парсер устарел очень, но для тех кто располагает знаниями подойдёт для написания своего.
Если кому нужно - напишу нормальный.
18:37:52 0
#3 Qemu uid#2451 Фог все за :)
мурз у меня не пашет ((
Internal Server Error и все((
19:48:07 0
#4 MyP3uk uid#1395 ну дык всё в ознакомительных целях :) 21:46:51 0
#5 Qemu uid#2451 блин скинь рабочий :D
влом искать ><
22:04:54 0
#6 MyP3uk uid#1395 ну как бы я сам не пользуюсь, как время будет перепишу этот, но это не скоро. Ча в рекламную кампанию устроился работать, дома буду только вечером и то полудохлый :( 22:27:29 0
Следующие сообщения
*Ник: Проверка уникальности... Если вы уже зарегистрированы, авторизуйтесь.
*Сообщение:
  Загрузка...