Foros del Web » Programando para Internet » PHP »

Hotmail en tu WEB

Estas en el tema de Hotmail en tu WEB en el foro de PHP en Foros del Web. Que tal gentita, como estan aca de nuevo para fastidiar, jejeje, pero esta vez quisiera enseñarles un codigo que encontre el cual es un aporte ...
  #1 (permalink)  
Antiguo 09/02/2005, 11:37
 
Fecha de Ingreso: agosto-2004
Mensajes: 258
Antigüedad: 19 años, 8 meses
Puntos: 0
Pregunta Hotmail en tu WEB

Que tal gentita, como estan aca de nuevo para fastidiar, jejeje, pero esta vez quisiera enseñarles un codigo que encontre el cual es un aporte de Samuel Castillo - thessoro: [email protected], es un aplicativo muy interesante acerca de poder enlazar tu web con tu msn con tu cuenta y asi poder ver tus contactos onlines y todo, derrepente ya lo hayan visto pero yo qye recien veo esto me parece locaso, asi que coparto todo el codigo con ustedes les pongo el enlace para que puedan bajarselo competo desde AQUI, espero que este tema sea razon para poder aprender su funcionamiento completo ya que ahun no logro hacerlo funcionar me sale un error de socket, pero se que en esta comunidad hay muchas personas que son unos lobos,espero nos enseñen y podamos ir comentando el codigo aqui, voy poniendo la clase, espero comentarios.
Código PHP:
<?
class msnclass {

    function 
msnclass ($login,$password) {
        isset(
$login) ? $this->msnuser=$login : die ("No se ha especificado usuario");
        isset(
$password) ? $this->msnpassword=$password : die ("No se ha especificado password");
        
$this->dispatchserver="messenger.hotmail.com";
        
$this->dispatch_port="1863";
        
$this->msnlogin();
        
$this->trid=5;
    }

    function 
msnlogin () {
        
$this->msn_stream=$this->new_msn_stream ($this->dispatchserver,$this->dispatch_port);
        
$this->simple_io ($this->msn_stream,"VER 1 MSNP10 MSNP9 MSNP8 MSNP7 MSNP6 MSNP5 MSNP4 CVR0\r\n");
        
$this->simple_io ($this->msn_stream,"CVR 2 0x0409 winnt 5.1 i386 MSNMSGR 5.0.0540 MSMSGS $this->msnuser\r\n");
        
$new_ip=$this->simple_io ($this->msn_stream,"USR 3 TWN I $this->msnuser\r\n");
        
// XF3 3 NS 207.46.106.35:1863 0 207.46.104.20:1863
        
$new_ip=explode (" ",$new_ip);
        
$new_ip=explode (":",$new_ip[3]);
        
$ip=$new_ip[0];
        
$port=$new_ip[1];
        unset (
$new_ip);
        
//$this->msn_close ($this->msn_stream);   lo cierra solo

        // Este es el stream definitivo, el que hay que mantener
        
$this->msn_stream=$this->new_msn_stream ($ip,$port);
        
$this->simple_io ($this->msn_stream,"VER 1 MSNP10 MSNP9 MSNP8 MSNP7 MSNP6 MSNP5 MSNP4 CVR0\r\n");
                
$this->simple_io ($this->msn_stream,"CVR 2 0x0409 winnt 5.1 i386 MSNMSGR 5.0.0540 MSMSGS $this->msnuser\r\n");
                
$semilla_dispatch=$this->simple_io ($this->msn_stream,"USR 3 TWN I $this->msnuser\r\n");
        
$semilla_dispatch=explode (" ",$semilla_dispatch);
        
$semilla_dispatch=$semilla_dispatch[4];
        
$this->msnuser=urlencode ($this->msnuser);
        
$this->msnpassword=urlencode ($this->msnpassword);
        
// Consultamos el servidor para login al nexus passport
        
$server=$this->nexus_passport();
        
$this->host=$server[0];
        
$this->path=$server[1];
        while (
$ticket=="relogin" || !$ticket) {
                     
$ticket=$this->login_server ($this->host,$this->path,$this->msnuser,$this->msnpassword,$semilla_dispatch);
        }
        
$this->$nick_user=$this->raw_io ($this->msn_stream,"USR 4 TWN S $ticket\r\n");
    }
    function 
recupera_nick () {
        
$nick_user=explode (" ",$this->$nick_user);
        return 
urldecode($nick_user[4]);
    }
    function 
anade_usuario($email) {     // trids a partir del 7
        
$posible_error=$this->raw_io ($this->msn_stream,"ADD $this->trid AL $email $email\r\n");
        
$this->trid++;
        return 
$posible_error;
    }

    function 
new_msn_stream ($servidor,$puerto) {
        
$msn_stream=fsockopen ($servidor,$puerto) or die ("No se pudo conectar al servidor $servidor");
        return 
$msn_stream;
    }

    function 
nexus_passport() {
        
// Por otro lado, recogemos el servidor que nos proporcionara el ticket
        
$passport_stream=$this->new_msn_stream ("ssl://nexus.passport.com",443);
        
$headers=$this->raw_io ($passport_stream"GET /rdr/pprdr.asp HTTP/1.0\r\n\r\n");
        
//$this->msn_close ($passport_stream);  lo cierra solo
        
preg_match ("/DALogin=(.*?),/ie",$headers,$datos_login);
        
$datos_login=$datos_login[1];
        
$partes_host=explode ("/",$datos_login);
        
$host=$partes_host[0];
        if (
count($partes_host)>2) {
            
$path=implode ("/",array_slice ($partes_host,1));
        }
        else 
$path="/".$partes_host[1];
        return array (
$host,$path);
    }

    function 
login_server ($host,$path,$user,$password,$semilla) {
            
$login_stream=$this->new_msn_stream ("ssl://$host",443);
            
$cadena="GET $path HTTP/1.1\r\n";
            
$cadena.="Authorization: Passport1.4 OrgVerb=GET,OrgURL=http%3A%2F%2Fmessenger%2Emsn%2Ecom,sign-in=$user,pwd=$password,$semilla";
            
$cadena.="Host: $host\r\n\r\n";
        
$headers=$this->raw_io ($login_stream,$cadena);
        
fclose($login_stream);

        if (
eregi("HTTP/1.1 302 Found",$headers)) {
            
$nuevo_login=array();
            
preg_match ("/Location: https:\/\/(.*)\/(.*)/i",$headers,$nuevo_login);
            
$this->host=$nuevo_login[1];
            
$this->path="/".$nuevo_login[2];
            return 
$cadena="relogin";
        }
        elseif (
eregi("HTTP/1.1 200 OK",$headers)) {
            
$ticket=array();
            
preg_match("/from-PP=\'(.*)\',ru/i"$headers,$ticket);
            return 
$ticket[1];
        }
        else return 
false;
    }

    function 
estado_invisible () {
             
$usuarios_online=$this->raw_io ($this->msn_stream,"CHG $this->trid HDN\r\n");
        
$this->trid++;
        
$usuarios_online=explode ("\n",$usuarios_online);
        
$usuarios_online=array_splice($usuarios_online,1,count($usuarios_online)-5);
        
$devolver=array();
                foreach (
$usuarios_online as $user) {
            
$user=explode (" ",$user);
            
$devolver["$user[3]"]=array ($user[4],$user[2]);
        }
        
$this->raw_io ($this->msn_stream,"");

        return 
$devolver;
    }
    function 
lista_contactos () {
        
$todos=$this->raw_io ($this->msn_stream,"SYN $this->trid 0\r\n");
        
$this->trid++;
        
$todos=explode ("\n",$todos);
        return 
$todos;
    }

    function 
responder_ping($semilla) {
        
$this->trid++;
        
fputs($this->msn_stream,"QRY $this->trid [email protected] 32\r\n");
        
// pk aqui va el $this->trid++ antes es facil de entender
        // los pings siempre le llegan si ha habido instruccion (k es cuando recogemos valores)
        // con lo que no se puede usar el trid actual, porque ésta ya lo habrá utilizado
        // cuando acabe la instruccion inicial, ya le suma otro +1 a trid.
        
$semilla=md5($semilla."Q1P7W2E4J9R8U3S5");
        
// la semilla es el hash md5 del numero enviado por CHL mas el string Q1P7W2E4...
        
$query=$this->simple_io($this->msn_stream,$semilla);
        
// Atencion, el payload va sin retorno de carro
    
}

    function 
simple_io ($stream,$cadena) {
        
fputs ($stream,$cadena);
        
$output=fgets ($stream,512);
        
//echo $output."\n"; //descomentalo para debugear
        
return $output;
    }

    function 
raw_io ($stream,$cadena) {
        
fputs ($stream,$cadena);
        while (
$linea=trim (fgets ($stream,512))) {
            
//deteccion de PING's del servidor, formato->CHL 0 12312345543534 <- semilla
            
if (ereg ("CHL 0",$linea)) {
                
$semilla=explode (" ",$linea);
                
$this->responder_ping($semilla[2]);
            }
            
$output.=$linea."\n";
        }
         
//echo $output;  //descomentalo para debugear
        
return $output;
    }

    function 
msn_close () {
        
fclose ($this->msn_stream);
    }
}
?>
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:47.