Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/02/2006, 07:24
raul123
 
Fecha de Ingreso: septiembre-2005
Mensajes: 94
Antigüedad: 18 años, 6 meses
Puntos: 0
La verdad que el código viene bastante mal documentado, pero ya sé por dónde anda el error:

El puerto al que pretendo conectar (1863) no está abierto en mi hosting, ya me lo han dicho.
Voy a dejar aquí la clase completa para quien la quiera usar:
MSN List Grabber:

msnlistgrab.php

Código PHP:
<?php
error_reporting
(E_ALL); 
    
/****************************************************************************************
    *                                   MSN CONTACT LIST GRAB CLASS                            *
    *             (c)2005 Ghulam Mustafa, [email protected], Pakistan                    *
    *                               ver 1.0 (04.02.2005)                                    *
    ****************************************************************************************/
    
class msnlistgrab {
    var 
$user='Nombre_usuario';
    var 
$password='contraseña_aquí' ;
    var 
$server ='messenger.hotmail.com';
    var 
$port 1863;
    var 
$version 'MSNMSGR 6.2';
    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);
        }
        echo 
$this->socket;
        echo 
"intentamos conectar";
        
$this->socket fsockopen($server,$port,$errno$errstr,20);       
        
//stream_set_timeout($GLOBALS["socket"], 20000);
        
if (!$this->socket) {
           echo 
"$errstr ($errno)<br />\n";
        }
        echo 
"conectado";
                
        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($curlCURLOPT_URL"https://nexus.passport.com:443/rdr/pprdr.asp");
        
curl_setopt($curlCURLOPT_RETURNTRANSFER1);
        
curl_setopt($curlCURLOPT_VERBOSE0);
        
curl_setopt($curlCURLOPT_HEADER,1);
        
curl_setopt($curlCURLOPT_HTTPHEADER$arr);
        
curl_setopt($curlCURLOPT_SSL_VERIFYPEERFALSE);
        
$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($curlCURLOPT_URL"https://" $split[0] . ":443/"$split[1]);
        
curl_setopt($curlCURLOPT_RETURNTRANSFER1);
        
curl_setopt($curlCURLOPT_VERBOSE0);
        
curl_setopt($curl,CURLOPT_FOLLOWLOCATION,1);
        
curl_setopt($curlCURLOPT_HTTPHEADER$headers);
        
curl_setopt($curlCURLOPT_HEADER,1);
        
curl_setopt($curlCURLOPT_SSL_VERIFYPEERFALSE);

        
$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

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