• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

tymonn

[PHP]MSN Grabber

6 mensagens neste tópico

Olá, estava a programar e lembrei-me que existe maneira de controlar os contactos do .net passport através de PHP, para uso próprio futuramente ou apenas para ficar com o conhecimento, fui pesquisar, deparei-me então com este script, que é o mais falado em fóruns etc, os posts desses fóruns não são assim tão recentes e receio que isto já não funcione, mas por outro lado, em Outubro a versão portuguesa do "facebox" (pt.facebox.com)  saiu em Portugal e eles usam um script igual ou parecido com a mesma funcionalidade para obrigar os utilizadores a darem acesso aos seus contactos de MSN, para se conseguirem registar e consequente pub (talvez mesmo, SPAM) nas caixas de correio dos seus amigos.

Eu testei, mas não consegui, até porque não percebo a ideia de chamarem funções que não existem no script, apesar de em todos os foruns e no phpclasses.com (salvo erro) apenas fala deste file e do seu exemplo.

Se alguém aqui já usou um script deste género, ou se o tiver e puder partilhar, agradecia ;)

Abraço

MsnGrabber:

<?php

   /****************************************************************************************
   *                                MSN CONTACT LIST GRAB CLASS                            *
   *             (c)2005 Ghulam Mustafa, mustafa.pk@gmail.com, Pakistan                    *
   *                               ver 1.0 (04.02.2005)                                    *
   ****************************************************************************************/
   
class msnlistgrab {
   var $user='username';
   var $password='password' ;
   var $server ='messenger.hotmail.com';
   var $port = 1863;
   var $version = 'MSNMSGR 8.0';
   var $buffer;
   var $socket;
   var $startcom;
   var $error="";
   function msnlistgrab() {

   }
   function GetRecords(){
      if ($this->msn_connect($this->server, $this->port))
      {
         return $this->res;
      }
      else
      {
         return $this->error;
      }
   }

   function getData() {
      $this->buffer="";
      while (!feof($this->socket)) {
         $this->buffer .= fread($this->socket,1024);
         if (preg_match("/\r/",$this->buffer)) {
            break;
         }
      }
      $this->checkData($this->buffer);
   }
   function getData2() {;
   //$container="";
   $buffer="";
   while (!feof($this->socket)) {
      if ($this->i>1) {
         if ($this->i==$this->total) {
            fclose($this->socket);
            $this->res;
            break;
         }
      }
      $buffer = fread($this->socket,8192);
      $this->check_buffer($buffer);
   }
   }

   function check_buffer($buffer) {
      if (eregi("^SYN",$buffer)) {
         list($junk, $junk, $junk, $this->total) = explode(" ", $buffer);
         //   echo '<h1>Number of Records: '.$this->total.'</h1>';
      }
      $this->grabber($buffer);
   }

   function grabber ($buffer)
   {
      $g = preg_split("/[\n]+/", $buffer);
      for ($n=0;$n<count($g);$n++) {
         if (strstr($g[$n], 'LST')) {
            $this->i++;
            //echo $i.',';
            list($junk, $email) = explode(" ", $g[$n]);
            $this->res[] = $email;
         }
      }

   }

   function checkData($buffer) {
      //              echo $buffer;
      if (preg_match("/lc\=(.+?)/Ui",$buffer,$matches)) {

         $this->challenge = "lc=" . $matches[1];

      }

      if (preg_match("/(XFR 3 NS )([0-9\.\:]+?) (.*) ([0-9\.\:]+?)/is",$buffer,$matches)) {
         $split = explode(":",$matches[2]);
         $this->startcom = 1;
         $this->msn_connect($split[0],$split[1]);

      }

      if (preg_match("/tpf\=([a-zA-Z0-9]+?)/Ui",$buffer,$matches)) {

         $this->nexus_connect($matches[1]);
      }
      /*
      $split = explode("\n",$buffer);

      for ($i=0;$i<count($split);$i++) {

      $detail = explode(" ",$split[$i]);

      if ($detail[0] == "LST") {
      //echo "<div  OnMouseOver=\"style.cursor='hand';showTooltip('show','$detail[1]-$detail[3]')\" OnMouseMove=\"followTooltip('show')\" OnMouseOut=\"showTooltip('hide')\">" . urldecode($detail[2]) . "</div>";
      }
      }
      */



   }

   function msn_connect($server, $port) {

      if (IsSet($this->socket)) {
         fclose($this->socket);
      }

      $this->socket = fsockopen($server,$port);       //stream_set_timeout($GLOBALS["socket"], 20000);
      if (!$this->socket) {
         return "Could not connect";
      } else {
         $this->startcom++;
         $this->send_command("VER " . $this->startcom . " MSNP8 CVR0",1);
         $this->send_command("CVR " . $this->startcom . " 0x0409 win 4.10 i386 ". $this->version ." MSMSGS " . $this->user . "@hotmail.com",1);
         $this->send_command("USR " . $this->startcom . " TWN I " . $this->user . "@hotmail.com",1);

      }
   }

   function send_command($command)
   {
      $this->startcom++;
      //      echo "<font color=blue> >> $command<br>";
      fwrite($this->socket,$command . "\r\n");
      $this->getData();


   }


   function nexus_connect($tpf)
   {

      $arr[] = "GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n";

      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, "https://nexus.passport.com:443/rdr/pprdr.asp");
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_VERBOSE, 0);
      curl_setopt($curl, CURLOPT_HEADER,1);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $arr);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
      $data = curl_exec($curl);
      curl_close($curl);
      preg_match("/DALogin=(.+?),/",$data,$matches);

      //$data = str_replace("\n","<br>",$data);
      //              echo $data;

      //echo "<br><br>";

      $split = explode("/",$matches[1]);

      $headers[0] = "GET /$split[1] HTTP/1.1\r\n";
      $headers[1] = "Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=" . $this->user . "%40hotmail.com,pwd=" . $this->password . ", " . trim($this->challenge) . "\r\n";

      $curl = curl_init();
      curl_setopt($curl, CURLOPT_URL, "https://" . $split[0] . ":443/". $split[1]);
      curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
      curl_setopt($curl, CURLOPT_VERBOSE, 0);
      curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
      curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
      curl_setopt($curl, CURLOPT_HEADER,1);
      curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

      $data = curl_exec($curl);

      //$data = str_replace("\n","<br>\n",$data);
      //              echo $data;

      curl_close($curl);

      //echo "</font>";

      preg_match("/t=(.+?)'/",$data,$matches);
      $this->send_command("USR " . $this->startcom . " TWN S t=" . trim($matches[1]) . "",2);
      $this->send_command("SYN " . $this->startcom . " 0",2);
      $this->getData2();



   }

}
//end of the file
?>

Example:

<?php
include('msngrabber.php');
$gm = new msnlistgrab();
$gm->GetRecords();
foreach ($gm->res as $val)
{
echo $val .'<BR>';
}
echo '<hr>'.$gm->total;
?>

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Podes usar o GeShi para se ver melhor o codigo.

Muito Obrigada ;) também estava a achar estranho o código estar tão feio :P

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bastante interessante. Também conheco o qmsn, um cliente para o msn em php. ;)

Alguem pode mover isto para o armazem?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Bastante interessante. Também conheco o qmsn, um cliente para o msn em php. :)

Alguem pode mover isto para o armazem?

Olá :) antes de mais obrigada pela colaboração, andei a investigar e: http://qmsn.qartis.com/?qmsn  ( http://labs.qartis.com/qmsn/qmsn3-ui.tar.bz2 ) link directo

descubri mais um pouco sobre esta temática.

Isto é uma espécie de código do "meebo" ( ou outro qualquer webmessenger based ), também é muito interessante estudar isto, mas o que eu tinha em mente era mesmo uma espécie de script que apenas fornecendo o username e a password me fornecesse por exemplo uma matriz 

$msnContactList[$num]

se é que me percebes ;)

assim podia fazer um:

$sql = mysql_query ('select friends from table where username="'.$username.'" && pw="'.$password);



while ( $msnContactList = mysql_fetch_row ( $sql ) )
{
sendmail( $msnContactList['friends'] ) ;
}

para que fosse enviando convites para se juntarem ao site a que foi registado.

:D Obrigado pela ajuda, vou tentar conseguir isto do script do Qmsn :) se conseguir ponho aqui o código já "trimado" :)

Abraço

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Isso é feito com o cURL, eu tambem tenho esse script para o Hotmail Live, Gmail, Yahoo, MSN, entre outros!..

O Quickfire (acho que foi ele se nao me engano) tem ai um script feito por ele para retirar as estatisticas da netvisao atraves de curl e é mto facil aparender atraves desse script! ;)

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora