Home  >  Article  >  php教程  >  PHP simulates logging into MSN and obtains user information

PHP simulates logging into MSN and obtains user information

黄舟
黄舟Original
2016-12-14 13:06:061208browse

/*
* PHPhtm教程网,整体提供,测试通过
*/
$msn = new myMSN(phphtm@phphtm.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("
<<<{$data}
"); 
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());
}
}
?> ;

The above is PHP simulation of logging into MSN and obtaining user sample code. For more related content, please pay attention to the PHP Chinese website (www.php.cn)!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn