跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

PHP 模拟登陆MSN并获得用户信息_PHP

复制代码代码如下:php/** PHP100中文网,整体提供,测试通过*/$msn = new myMSN(php100@php100.com, "123");// MSNv9 class myMSN {private $server = "messenger.hotmail.com";private $port = 1863;private $nexus = "https://nexus.passport.com/rdr/pprdr.asp";private $sshLogin = "login.live.com/login2.srf"; //loginnet.passport.com/login2.srf private $getCode = null;private $_ip = null;private $_port = null;private $connect = null;private $trID = 1;private $maxMessage = 4096;private $userName = null;private $passWord = null;private $debug = true;function myMSN($userName="", $passWord="") {if (!empty($userName) && !empty($passWord)) {$this->userName = $userName;//$this->passWord = urlencode($passWord);$this->passWord = $passWord;$this->startTalk();}}function put($data) {if ($this->isConnect()) {fputs($this->connect, $data);$this->trID ;if ($this->debug) print(">>>{$data}");}}function get() {if ($data = @fgets($this->connect, $this->maxMessage)) {if ($this->debug) print("");return $data;} else {return false;}}function isConnect() {if (!is_null($this->connect)) return true;else return false;}function close() {@fclose($this->connect);}function startTalk() {if ($this->connect = fsockopen($this->server, $this->port, $errno, $errstr, 2))$this->verTalk();}function verTalk() // MSN 协议协商 {$this->put("VER {$this->trID} MSNP9 CVR0 rn");$data = $this->get();//echo $data;if (false !== strripos($data, "VER"))$this->envTalk();}function envTalk() // 环境协商 {$this->put("CVR {$this->trID} 0x0409 winnt 5.0 i386 MSNMSGR 7.0.0816 MSMSGS {$this->userName} rn");$data = $this->get();//echo $data;if (false !== strripos($data, "CVR"))$this->reqTalk();}function reqTalk() // 请求确认 {$this->put("USR {$this->trID} TWN I {$this->userName} rn");$data = $this->get(); // XFR 3 NS 207.46.107.41:1863 0 65.54.239.210:1863 XFR 3 NS 207.46.107.25:1863 U D//echo $data;if (false !== strripos($data, "XFR")) {list(, , , $serv) = explode(" ", $data); // 分析服务器list($ip, $port) = explode(":", $serv); // 分析IP和端口$this->_ip = $ip;$this->_port = $port;$this->reLink($ip, $port);} else {//echo $data; // USR 3 TWN S ct=1205292058,rver=5.0.3270.0,wp=FS_40SEC_0_COMPACT,lc=1033,id=507,ru=http://messenger.msn.com,tw=0,kpp=1,kv=4,ver=2.1.6000.1,rn=1lgjBfIL,tpf=b0735e3a873dfb5e75054465196398e0 list(, , , , $this->getCode) = explode(" ", trim($data));//echo $data;if (empty($this->sshLogin))$this->reLoginTalk(); // 重新获取登陆服务器地址else$this->getLoginCode($this->sshLogin);}}function reLink($server, $port) // 重置连接 {$this->connect = null;$this->server = $server;$this->port = $port;$this->trID = 1;$this->startTalk();}function reLoginTalk() // 重新获取服务器地址 {$ch = curl_init($this->nexus);curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$header = curl_exec($ch);//print_r($header);curl_close($ch);preg_match ('/DALogin=(.*?),/', $header, $out); // 捕捉服务器登陆匹配//print_r($out);if (isset($out[1])) {$this->getLoginCode($out[1]);}else {//return false;exit("无法捕捉到登陆服务器的URL");}}function getLoginCode($slogin) // 获取登陆代码 {//echo($this->getCode);if (!is_null($this->getCode)) {$ch = curl_init("https://" . $slogin);$loginInfo = array("Authorization: Passport1.4 rgVerb=GET,OrgURL=http://messenger.msn.com,sign-in=" . $this->userName . ",pwd=" . $this->passWord . "," . $this->getCode,"Host: login.passport.com");curl_setopt($ch, CURLOPT_HTTPHEADER, $loginInfo);//print_r($loginInfo);//$this->getCode = null;curl_setopt($ch, CURLOPT_HEADER, 1);curl_setopt($ch, CURLOPT_NOBODY, 1);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);$header = curl_exec($ch);//print_r($header);preg_match ("/from-PP='(.*?)'/", $header, $out);//print_r($out);if (isset($out[1])) {$this->loginAction($out[1]);} else {//return false;exit("无法捕捉到登陆代码的信息");}} else {return false;}}function loginAction($loginCode) // 登陆工作 {$this->put("USR {$this->trID} TWN S {$loginCode} rn"); // USR |trID| SSO S |t=code|$data = $this->get();//echo $data;//print_r($data);//$this->put("SYN {$this->trID} 0 rn");//$this->put("CHG {$this->trID} NLN rn");//print_r($this->get());}}?>

相关文章