PHP 模擬登陸MSN并獲得用戶信息
更新時(shí)間:2009年05月16日 00:38:24 作者:
一個(gè)可以獲取msn上用戶信息的代碼
復(fù)制代碼 代碼如下:
<?php
/*
* PHP100中文網(wǎng),整體提供,測(cè)試通過
*/
$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("<div style='color:green;font-size:13px;'>>>>{$data}</div>");
}
}
function get() {
if ($data = @fgets($this->connect, $this->maxMessage)) {
if ($this->debug)
print("<div style='color:red;font-size:13px;'><<<{$data}</div>");
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 協(xié)議協(xié)商 {
$this->put("VER {$this->trID} MSNP9 CVR0 rn");
$data = $this->get();
//echo $data;
if (false !== strripos($data, "VER"))
$this->envTalk();
}
function envTalk() // 環(huán)境協(xié)商 {
$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() // 請(qǐng)求確認(rèn) {
$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); // 分析服務(wù)器
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(); // 重新獲取登陸服務(wù)器地址
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() // 重新獲取服務(wù)器地址 {
$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); // 捕捉服務(wù)器登陸匹配
//print_r($out);
if (isset($out[1])) {
$this->getLoginCode($out[1]);
}
else {
//return false;
exit("無法捕捉到登陸服務(wù)器的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());
}
}
?>
您可能感興趣的文章:
- php實(shí)現(xiàn)模擬登陸方正教務(wù)系統(tǒng)抓取課表
- PHP函數(shù)分享之curl方式取得數(shù)據(jù)、模擬登陸、POST數(shù)據(jù)
- PHP實(shí)現(xiàn)微信模擬登陸并給用戶發(fā)送消息的方法【文字,圖片,圖文】
- php模擬登陸的實(shí)現(xiàn)方法分析
- php中通過curl模擬登陸discuz論壇的實(shí)現(xiàn)代碼
- php 論壇采集程序 模擬登陸,抓取頁面 實(shí)現(xiàn)代碼
- PHP簡(jiǎn)單實(shí)現(xiàn)模擬登陸功能示例
- php實(shí)現(xiàn)微信模擬登陸、獲取用戶列表及群發(fā)消息功能示例
- php通過curl模擬登陸DZ論壇
- PHP模擬登陸163郵箱發(fā)郵件及獲取通訊錄列表的方法
- PHP 模擬登陸功能實(shí)例詳解
相關(guān)文章
PHP中使用cURL實(shí)現(xiàn)Get和Post請(qǐng)求的方法
PHP中使用cURL實(shí)現(xiàn)Get和Post請(qǐng)求的方法,需要的朋友可以參考一下2013-03-03php inc文件使用的風(fēng)險(xiǎn)和注意事項(xiàng)
本文講的是php中使用.inc文件的風(fēng)險(xiǎn)及解決方法2013-11-11簡(jiǎn)單的php 驗(yàn)證圖片生成函數(shù)
本函數(shù)可以生成簡(jiǎn)單的驗(yàn)證圖片,用于輸入的驗(yàn)證。2009-05-05PHP中類型轉(zhuǎn)換 ,常量,系統(tǒng)常量,魔術(shù)常量的詳解
這篇文章主要介紹了PHP中類型轉(zhuǎn)換 ,常量,系統(tǒng)常量,魔術(shù)常量的詳解的相關(guān)資料,希望通過本文能幫助到大家,讓大家掌握這部分內(nèi)容,需要的朋友可以參考下2017-10-10PHP 數(shù)據(jù)庫(kù) 常見問題小結(jié)
揭露 PHP 應(yīng)用程序中出現(xiàn)的五個(gè)常見數(shù)據(jù)庫(kù)問題 —— 包括數(shù)據(jù)庫(kù)模式設(shè)計(jì)、數(shù)據(jù)庫(kù)訪問和使用數(shù)據(jù)庫(kù)的業(yè)務(wù)邏輯代碼 —— 以及它們的解決方案。2009-06-06PHP中設(shè)置時(shí)區(qū),記錄日志文件的實(shí)現(xiàn)代碼
php中設(shè)置時(shí)區(qū) 記錄日志文件的實(shí)現(xiàn)代碼,需要的朋友可以參考下2013-01-01PHP下用rmdir實(shí)現(xiàn)刪除目錄的三種方法小結(jié)
PHP本身有一個(gè)rmdir()函數(shù)可以用來刪除目錄,不過要求必須是空目錄,本文列舉了三種方法。1、遞規(guī)法;2、系統(tǒng)調(diào)用法;3、循環(huán)法 。2008-04-04