Guest User

MPPMailGrabber/0.0.1

a guest
May 1st, 2010
3,517
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. <?php
  2.  if ($_GET['action']!=='search'){
  3. ?><form>
  4. Возраст: <input name="min_age" title="Минимальный возраст">—<input name="max_age"  title="Максимальный возраст"><br>
  5. Пол: <select name="gender">
  6.  <option value="0" selected>Любой</option>
  7.  <option value="1">Мужчина</option>
  8.  <option value="2">Женщина</option>
  9. </select>
  10. Страна: <select name="country">
  11.  <option value="0" selected>Любая</option>
  12.  <option value='24'>Россия</option>
  13.  <option value='81'>Азербайджан</option>
  14.  <option value='82'>Армения</option>
  15.  <option value='97'>Афганистан</option>
  16.  <option value='96'>Бангладеш</option>
  17.  <option value='99'>Бахрейн</option>
  18.  
  19.  <option value='100'>Бруней-Даруссалам</option>
  20.  <option value='101'>Бутан</option>
  21.  <option value='102'>Вьетнам</option>
  22.  <option value='83'>Грузия</option>
  23.  <option value='86'>Израиль</option>
  24.  <option value='95'>Индия</option>
  25.  
  26.  <option value='103'>Индонезия</option>
  27.  <option value='79'>Иордания</option>
  28.  <option value='85'>Ирак</option>
  29.  <option value='87'>Иран</option>
  30.  <option value='104'>Йемен</option>
  31.  <option value='84'>Казахстан</option>
  32.  
  33.  <option value='105'>Камбоджа</option>
  34.  <option value='106'>Катар</option>
  35.  <option value='107'>Кипр</option>
  36.  <option value='92'>Киргизия (Кыргызстан)</option>
  37.  <option value='76'>Китай</option>
  38.  <option value='3215'>Кокосовые острова (Австр.)</option>
  39.  
  40.  <option value='29'>Корея (КНДР)</option>
  41.  <option value='108'> Республика</option>
  42.  <option value='88'>Кувейт</option>
  43.  <option value='109'>Лаос</option>
  44.  <option value='110'>Ливан</option>
  45.  <option value='111'>Малайзия</option>
  46.  
  47.  <option value='112'>Мальдивы</option>
  48.  <option value='113'>Монголия</option>
  49.  <option value='114'>Мьянма</option>
  50.  <option value='115'>Непал</option>
  51.  <option value='116'>Объединенные Арабские Эмираты</option>
  52.  <option value='117'>Оман</option>
  53.  
  54.  <option value='3216'>Остров Рождества (Австр.)</option>
  55.  <option value='122'>Пакистан</option>
  56.  <option value='89'>Палестина</option>
  57.  <option value='94'>Саудовская Аравия</option>
  58.  <option value='118'>Сингапур</option>
  59.  <option value='78'>Сирия</option>
  60.  
  61.  <option value='91'>Таджикистан</option>
  62.  <option value='119'>Таиланд</option>
  63.  <option value='120'>Тайвань</option>
  64.  <option value='132'>Тимор</option>
  65.  <option value='90'>Туркмения</option>
  66.  <option value='77'>Турция</option>
  67.  
  68.  <option value='93'>Узбекистан</option>
  69.  <option value='121'>Филиппины</option>
  70.  <option value='98'>Шри Ланка</option>
  71.  <option value='75'>Япония</option>
  72.  <option value='123'>Австралия</option>
  73.  <option value='454'>Американское Самоа</option>
  74.  
  75.  <option value='124'>Вануату</option>
  76.  <option value='453'>Гуам (США)</option>
  77.  <option value='126'>Кирибати</option>
  78.  <option value='127'>Маршалловы Острова</option>
  79.  <option value='128'>Микронезия (Федеративные Штаты Микронезии)</option>
  80.  <option value='129'>Науру</option>
  81.  
  82.  <option value='3220'>Ниуэ (Н.Зел.)</option>
  83.  <option value='130'>Новая Зеландия</option>
  84.  <option value='3218'>Новая Каледония (Фр.)</option>
  85.  <option value='3221'>Острова Кука (Н.Зел.)</option>
  86.  <option value='3230'>Острова Херд и Макдональд (Австр.)</option>
  87.  <option value='131'>Палау</option>
  88.  
  89.  <option value='133'>Папуа - Новая Гвинея</option>
  90.  <option value='3222'>Питкерн (Брит.)</option>
  91.  <option value='125'>Самоа</option>
  92.  <option value='3219'>Сев. Марианские острова (США)</option>
  93.  <option value='134'>Соломоновы Острова</option>
  94.  <option value='3223'>Токелау (Н.Зел.)</option>
  95.  
  96.  <option value='135'>Тонга</option>
  97.  <option value='136'>Тувалу</option>
  98.  <option value='3224'>Уоллис и Футуна острова (Фр.)</option>
  99.  <option value='137'>Фиджи</option>
  100.  <option value='3226'>Французская Полинезия</option>
  101.  <option value='3225'>Французские Южные территории</option>
  102.  
  103.  <option value='138'>Канада</option>
  104.  <option value='139'>США</option>
  105.  <option value='3200'>Ангилья (Брит.)</option>
  106.  <option value='140'>Антигуа и Барбуда</option>
  107.  <option value='141'>Аргентина</option>
  108.  <option value='3202'>Аруба (Нид.)</option>
  109.  
  110.  <option value='142'>Багамы</option>
  111.  <option value='143'>Барбадос</option>
  112.  <option value='146'>Белиз</option>
  113.  <option value='3203'>Бермуды (Брит.)</option>
  114.  <option value='144'>Боливия</option>
  115.  <option value='145'>Бразилия</option>
  116.  
  117.  <option value='147'>Венесуэла</option>
  118.  <option value='3204'>Виргинские острова (Брит.)</option>
  119.  <option value='452'>Виргинские острова (США)</option>
  120.  <option value='149'>Гаити</option>
  121.  <option value='148'>Гайана</option>
  122.  <option value='3205'>Гваделупа (Фр.)</option>
  123.  
  124.  <option value='173'>Гватемала</option>
  125.  <option value='150'>Гондурас</option>
  126.  <option value='151'>Гренада</option>
  127.  <option value='152'>Гренландия (Дат.)</option>
  128.  <option value='153'>Доминика</option>
  129.  <option value='154'>Доминиканская Республика</option>
  130.  
  131.  <option value='155'>Колумбия</option>
  132.  <option value='156'>Коста-Рика</option>
  133.  <option value='157'>Куба</option>
  134.  <option value='3208'>Мартиника (Фр.)</option>
  135.  <option value='158'>Мексика</option>
  136.  <option value='3209'>Монтсеррат (Брит)</option>
  137.  
  138.  <option value='3201'>Нидерландские Антилы</option>
  139.  <option value='159'>Никарагуа</option>
  140.  <option value='3207'>Остров Кайман (Брит.)</option>
  141.  <option value='3211'>Острова Теркс и Кайкос (Брит.)</option>
  142.  <option value='160'>Панама</option>
  143.  <option value='161'>Парагвай</option>
  144.  
  145.  <option value='162'>Перу</option>
  146.  <option value='163'>Сальвадор</option>
  147.  <option value='164'>Сент-Винсент и Гренадины</option>
  148.  <option value='165'>Сент-Китс и Невис</option>
  149.  <option value='166'>Сент-Люсия</option>
  150.  <option value='3210'>Сент-Пьер и Микелон (Фр.)</option>
  151.  
  152.  <option value='167'>Суринам</option>
  153.  <option value='168'>Тринидат и Тобаго</option>
  154.  <option value='169'>Уругвай</option>
  155.  <option value='3212'>Фолклендские острова (Брит.)</option>
  156.  <option value='3206'>Французская Гвиана</option>
  157.  <option value='170'>Чили</option>
  158.  
  159.  <option value='171'>Эквадор</option>
  160.  <option value='3213'>Юж. Джорджия и Юж. Сандвичевы о-ва (Брит.)</option>
  161.  <option value='172'>Ямайка</option>
  162.  <option value='174'>Алжир</option>
  163.  <option value='175'>Ангола</option>
  164.  <option value='176'>Бенин</option>
  165.  
  166.  <option value='177'>Ботсвана</option>
  167.  <option value='3228'>Британская территория в Индийском океане</option>
  168.  <option value='178'>Буркина-Фасо</option>
  169.  <option value='179'>Бурунди</option>
  170.  <option value='180'>Габон</option>
  171.  <option value='181'>Гамбия</option>
  172.  
  173.  <option value='182'>Гана</option>
  174.  <option value='183'>Гвинея</option>
  175.  <option value='184'>Гвинея-Бисау</option>
  176.  <option value='185'>Джибути</option>
  177.  <option value='186'>Египет</option>
  178.  <option value='187'>Замбия</option>
  179.  
  180.  <option value='3198'>Зап. Сахара</option>
  181.  <option value='23'>Зимбабве</option>
  182.  <option value='188'>Кабо-Верде</option>
  183.  <option value='189'>Камерун</option>
  184.  <option value='190'>Кения</option>
  185.  <option value='191'>Коморы</option>
  186.  
  187.  <option value='193'>Конго (Заир)</option>
  188.  <option value='192'> Республика</option>
  189.  <option value='194'>Кот-д`Ивуар</option>
  190.  <option value='195'>Лесото</option>
  191.  <option value='196'>Либерия</option>
  192.  <option value='197'>Ливия</option>
  193.  
  194.  <option value='198'>Маврикий</option>
  195.  <option value='199'>Мавритания</option>
  196.  <option value='200'>Мадагаскар</option>
  197.  <option value='3229'>Майотт (Фр.)</option>
  198.  <option value='201'>Малави</option>
  199.  <option value='202'>Мали</option>
  200.  
  201.  <option value='203'>Марокко</option>
  202.  <option value='204'>Мозамбик</option>
  203.  <option value='205'>Намибия</option>
  204.  <option value='206'>Нигер</option>
  205.  <option value='207'>Нигерия</option>
  206.  <option value='3227'>Остров Буве (Норв.)</option>
  207.  
  208.  <option value='3197'>Реюньон (Фр.)</option>
  209.  <option value='208'>Руанда</option>
  210.  <option value='209'>Сан-Томе и Принсипи</option>
  211.  <option value='210'>Свазиленд</option>
  212.  <option value='3199'>Святая Елена (Брит.)</option>
  213.  <option value='211'>Сейшелы</option>
  214.  
  215.  <option value='212'>Сенегал</option>
  216.  <option value='213'>Сомали</option>
  217.  <option value='214'>Судан</option>
  218.  <option value='215'>Сьерра-Леоне</option>
  219.  <option value='216'>Танзания</option>
  220.  <option value='217'>Того</option>
  221.  
  222.  <option value='218'>Тунис</option>
  223.  <option value='219'>Уганда</option>
  224.  <option value='220'>Центральноафриканская Республика</option>
  225.  <option value='222'>Чад</option>
  226.  <option value='223'>Экваториальная Гвинея</option>
  227.  <option value='221'>Эритрея</option>
  228.  
  229.  <option value='224'>Эфиопия</option>
  230.  <option value='225'>Южно-Африканская Республика (ЮАР)</option>
  231.  <option value='39'>Украина</option>
  232.  <option value='40'>Австрия</option>
  233.  <option value='32'>Албания</option>
  234.  <option value='33'>Андорра</option>
  235.  
  236.  <option value='340'>Белоруссия</option>
  237.  <option value='38'>Бельгия</option>
  238.  <option value='41'>Болгария</option>
  239.  <option value='42'>Босния и Герцеговина</option>
  240.  <option value='43'>Ватикан</option>
  241.  <option value='45'>Великобритания</option>
  242.  
  243.  <option value='44'>Венгрия</option>
  244.  <option value='46'>Германия</option>
  245.  <option value='3193'>Гернси (Брит.)</option>
  246.  <option value='47'>Гибралтар (Брит.)</option>
  247.  <option value='48'>Греция</option>
  248.  <option value='49'>Дания</option>
  249.  
  250.  <option value='3194'>Джерси (Брит.)</option>
  251.  <option value='50'>Ирландия</option>
  252.  <option value='51'>Исландия</option>
  253.  <option value='34'>Испания</option>
  254.  <option value='52'>Италия</option>
  255.  <option value='53'>Латвия</option>
  256.  
  257.  <option value='54'>Литва</option>
  258.  <option value='55'>Лихтенштейн</option>
  259.  <option value='56'>Люксембург</option>
  260.  <option value='57'>Македония</option>
  261.  <option value='58'>Мальта</option>
  262.  <option value='59'>Молдавия</option>
  263.  
  264.  <option value='36'>Монако</option>
  265.  <option value='60'>Нидерланды</option>
  266.  <option value='61'>Норвегия</option>
  267.  <option value='3195'>Остров Мэн (Брит.)</option>
  268.  <option value='62'>Польша</option>
  269.  <option value='35'>Португалия</option>
  270.  
  271.  <option value='63'>Румыния</option>
  272.  <option value='64'>Сан-Марино</option>
  273.  <option value='74'>Сербия и Черногория</option>
  274.  <option value='65'>Словакия</option>
  275.  <option value='66'>Словения</option>
  276.  <option value='67'>Фарерские о-ва (Дания)</option>
  277.  
  278.  <option value='68'>Финляндия</option>
  279.  <option value='37'>Франция</option>
  280.  <option value='69'>Хорватия</option>
  281.  <option value='70'>Чехия</option>
  282.  <option value='71'>Швейцария</option>
  283.  <option value='72'>Швеция</option>
  284.  
  285.  <option value='3196'>Шпицберген (Норв.)</option>
  286.  <option value='73'>Эстония</option>
  287.  
  288. </select>
  289.  
  290. <input type="hidden" name="action" value="search"><br>
  291. В сети: <input type="checkbox" name="online" value="1"><br>
  292. <input type="submit" value="Ищем">
  293. </form><?php
  294.   exit;
  295.  }
  296.  
  297.  #логин (в виде адрес@домен.ру) и пароль вставляйте сюда!
  298. $login    ='';
  299.  $password ='';
  300.  
  301.  #$agent_ver='client="magent" version="5.6" build="3396"';
  302. $agent_ver='MPPMailGrabber/0.0.1';
  303.  
  304.  #функции
  305. function A2S2($ar){
  306.   $buf='';
  307.   for ($i=0;$i<count($ar);$i++){
  308.    if (gettype($ar[$i])=='string'){$buf.=$ar[$i];}else{$buf.=chr($ar[$i]);}
  309.   }
  310.   return $buf;
  311.  }
  312.  
  313.  function A2S($ar, $seq, $msg){
  314.   $buf =A2S2(array(0xEF,0xBE,0xAD,0xDE,0x15,0x00,0x01,0x00));#magic & текущая версия протокола
  315.  $buf1=A2S2($ar);
  316.   $buf.=write_uidl($seq);         #пишем seq
  317.  $buf.=write_uidl($msg);         #пишем msg
  318.  $buf.=write_uidl(strlen($buf1));#пишем длину запроса
  319.  for ($i=1;$i<=(4+20);$i++){$buf.=chr(0);}#пустые поля
  320.  return $buf.$buf1;
  321.  }
  322.  
  323.  function read_uidl($ar,$offset){
  324.   return  ord($ar[$offset]) |
  325.          (ord($ar[$offset+1])<<8)  |
  326.          (ord($ar[$offset+2])<<16) |
  327.          (ord($ar[$offset+3])<<24);
  328.  }
  329.  
  330.  function write_uidl($num){
  331.   $buf='';
  332.   for ($i=1;$i<=4;$i++){
  333.    $buf.=chr($num & 0xFF);
  334.    $num =$num>>8;
  335.   }
  336.   return $buf;
  337.  }
  338.  
  339.  #Код
  340. error_reporting(~E_ALL);
  341.  $fp_m = fsockopen("mrim.mail.ru", 2042, $errno, $errstr, 10);
  342.  if (!$fp_m){
  343.   echo "Ошибка: <b>$errstr</b>";
  344.   exit;
  345.  }
  346.  $buf=fgets($fp_m);
  347.  if (!preg_match('|([0-9.]+):([0-9]{1,5})|',$buf,$a)){echo 'Неправильный ответ от сервера';exit;}
  348.  echo 'Сервер приказал соединяться с <b>'.$a[0].'</b><br>';flush();
  349.  fclose($fp_m);
  350.  
  351.  $fp = fsockopen($a[1], $a[2], $errno, $errstr, 10);
  352.  
  353.  if (!$fp){
  354.   echo "Ошибка: <b>$errstr</b>";
  355.   exit;
  356.  }
  357.  
  358.  $buf=A2S(array(),0x01,0x1001);
  359.  fwrite($fp,$buf);
  360.  $buf=fread($fp,512);
  361.  if (read_uidl($buf,0xC)!==0x1002){
  362.   echo 'Зайти не получилось';
  363.   exit;
  364.  }
  365.  $ping_inter=read_uidl($buf,0x2C);
  366.  
  367.  $buf =write_uidl(strlen($login));
  368.  $buf.=$login;
  369.  $buf.=write_uidl(strlen($password));
  370.  $buf.=$password;
  371.  $buf.=write_uidl(0xFFFFFFFF);
  372.  $buf.=write_uidl(strlen($agent_ver)).$agent_ver;
  373.  #А вот здесь начинаются недокументированные изменения в протоколе
  374. $buf.=write_uidl(02).'ru';
  375.  $buf.=write_uidl(16).write_uidl(01).write_uidl(08).'geo-list';
  376.  $buf.=write_uidl(21).'MRA 5.6 (build 3396);';
  377.  
  378.  #запаковываем всё
  379. $buf=A2S(array($buf),0x02,0x1078);
  380.  fwrite($fp,$buf);
  381.  $buf=fread($fp,10240);
  382.  $num=read_uidl($buf,0x0C);
  383.  if ($num==4101){
  384.   #ошибка при заходе
  385.  $len=read_uidl($buf,0x10);
  386.   $err=substr($buf,0x30,$len);
  387.   echo "Ошибка при заходе: <b>$err</b>";
  388.   exit;
  389.  }
  390.  if ($num!==4100){
  391.   #ошибка при заходе
  392.  echo "Опять протокол изменили?";
  393.   exit;
  394.  }
  395.  sleep(1);
  396.  
  397.  #меняем статус
  398. $buf=array(0x01, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00,
  399.             0x73, 0x74, 0x61, 0x74, 0x75, 0x73, 0x5F, 0x31,
  400.             0x0C, 0x00, 0x00, 0x00, 0x1E, 0x04, 0x3D, 0x04,
  401.             0x3B, 0x04, 0x30, 0x04, 0x39, 0x04, 0x3D, 0x04,
  402.             0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF);
  403.  $buf=A2S($buf,0x03,0x1022);
  404.  fwrite($fp,$buf);
  405.  #с этого момента мы в сети
  406. echo 'Мы зашли<br>';flush();
  407.  sleep(10);#сразу после захода на сервер искать всё равно нельзя, подождём
  408.  
  409.  $pac_num  =4;  #номер пакета
  410. $ping_last=0;  #дата последнего пинга
  411. $mails=array();#список найденных адресов
  412.  
  413.  ini_set("max_execution_time",2*60*60); #ну, двух часов нам хватит
  414. do{
  415.   #проверяем нужен ли пинг
  416.  if ($ping_last+$ping_inter<time()){
  417.    $buf=A2S(array(),$pac_num++,0x1006);
  418.    fwrite($fp,$buf);
  419.    $ping_last=time();
  420.   }
  421.  
  422.   stream_set_blocking($fp,0);
  423.   fread($fp,10240);
  424.   stream_set_blocking($fp,1);
  425.   usleep(250000);
  426.  
  427.   $buf='';
  428.  
  429.   #пол
  430.  if (($_GET['gender']=='1')or($_GET['gender']=='2')){$buf.=write_uidl(0x05).write_uidl(0x01).$_GET['gender'];}
  431.   #мин. возраст
  432.  if (($_GET['min_age']>10)and($_GET['min_age']<100)){$buf.=write_uidl(0x07).write_uidl(strlen($_GET['min_age'])).$_GET['min_age'];}
  433.   #макс. мозраст
  434.  if (($_GET['max_age']>10)and($_GET['min_age']<100)){$buf.=write_uidl(0x08).write_uidl(strlen($_GET['max_age'])).$_GET['max_age'];}
  435.   #страна
  436.  if ($_GET['country']>0){$buf.=write_uidl(0x0B).write_uidl(strlen($_GET['country'])).$_GET['country'];}
  437.   #онлайн
  438.  if ($_GET['online']=='1'){$buf.=write_uidl(0x09).write_uidl(0x01).' ';}
  439.  
  440.   #запаковываем и отправляем
  441.  $buf =A2S(array($buf),$pac_num++,0x1029);
  442.   fwrite($fp,$buf);
  443.   $buf =fread($fp,0x2C);
  444.   $j   =read_uidl($buf,0x10);#получаем длину пакета
  445.  $buf =fread($fp,$j);
  446.   $code=read_uidl($buf,0x00);#получаем длину пакета
  447.  if ($code==0){echo '<b>Не найдено</b><br>';}
  448.   if ($code==2){
  449.    #таймаут
  450.   sleep(15);
  451.   }
  452.   if ($code==1){
  453.    #Ура, пользователи найдены
  454.   #есть большая вероятность, что с первого раза получен не весь пакет
  455.   while ($j>strlen($buf)){
  456.     $buf1=fread($fp,$j-strlen($buf));
  457.     if ($buf1==''){echo '<b>disconnected</b>';exit;}
  458.     $buf.=$buf1;
  459.    }
  460.    unset($buf1);
  461.    $field_num=read_uidl($buf,0x04);#кол-во полей
  462.   $found    =read_uidl($buf,0x08);#кол-во найденных записей
  463.   $f_l      =array("username"=>0, "domain"=>0);#ссылки на нужные поля
  464.  
  465.    $offset   =0x10;
  466.    #перебираем все поля
  467.   for ($i=1;$i<=$field_num;$i++){
  468.     $l=read_uidl($buf,$offset);
  469.     $s=substr($buf,$offset+4,$l);
  470.     if (strcasecmp($s, 'username')==0){$f_l['username']=$i;}
  471.     if (strcasecmp($s, 'domain')  ==0){$f_l['domain']  =$i;}
  472.     $offset+=4+$l;
  473.    }
  474.  
  475.    #перебираем все вхождения
  476.   $mails=array();
  477.    for ($i=1;$i<=$found;$i++){
  478.     $m_t=array("username"=>'', "domain"=>'');
  479.     for ($j=1;$j<=$field_num;$j++){
  480.      $l=read_uidl($buf,$offset);
  481.      if ($f_l['username']==$j){
  482.       $s=substr($buf,$offset+4,$l);
  483.       $m_t['username']=$s;
  484.      }
  485.      if ($f_l['domain']==$j){
  486.       $s=substr($buf,$offset+4,$l);
  487.       $m_t['domain']=$s;
  488.      }
  489.      $offset+=4+$l;
  490.     }
  491.     $mail=$m_t['username'].'@'.$m_t['domain'];
  492.     echo $mail.'<br>';
  493.  
  494.     #добавляем адрес, что бы не показывать его n-ный раз
  495.    $u=false; for ($j=0;$j<count($mails);$j++){
  496.      if ($mails[$j]==$mail){$u=true;break;}
  497.     }
  498.     if (!$u){$mails[count($mails)]=$mail;}
  499.    }#for $i=1;
  500.   flush();
  501.   }
  502.   if ($found<50){break;}#кол-во найденных записей всегда 50, если меньше, значит это всё, что можно было достать
  503.  
  504.   #не надо слишком быстро искать, подождём
  505.  sleep(5);
  506.  } while (true);
  507.  
  508.  fclose($fp);
  509. ?>
RAW Paste Data