本文展示一個使用 PHP Socket 程式設計,實作 MSN Messenger 9 (MSNP9) 協議的類別,可自動完成認證流程並獲取用戶資訊。注意:MSN 服務已於 2014 年停止,此代碼僅供協議學習與 Socket 程式設計參考。
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";
// 連線狀態
private $connect = null;
private $trID = 1; // 交易 ID
private $maxMessage = 4096; // 緩衝區大小
// 使用者憑證
private $userName = null;
private $passWord = null;
private $debug = true; // 除錯模式
// 建構子:自動啟動協議流程
function __construct($userName="", $passWord="") {
if (!empty($userName) && !empty($passWord)) {
$this->userName = $userName;
$this->passWord = $passWord;
$this->startTalk();
}
}
// ... 後續方法詳見下方流程圖
}
fsockopen() 連接 messenger.hotmail.com:1863VER trID MSNP9 CVR0CVR trID 0x0409 winnt 5.0 i386 MSNMSGR 7.0.0816 MSMSGS userUSR trID TWN I user@domainXFR trID NS ip:port → 解析 IP/Port → 重新連線USR trID TWN S ticket 完成認證| 方法 | 功能 |
|---|---|
put() |
發送指令到伺服器,自動遞增 trID,除錯模式下輸出綠色日誌 |
get() |
接收伺服器回應,除錯模式下輸出紅色日誌 |
reLink() |
處理 XFR 轉向:關閉舊連線、更新伺服器資訊、重新啟動流程 |
reLoginTalk() |
使用 cURL 向 Nexus 伺服器請求登入 URL (DALogin) |
getLoginCode() |
攜帶帳號密碼與認證碼向登入伺服器請求,解析回應中的 from-PP 票據 |
loginAction() |
發送最終 SSO 登入指令 |
<?php
// 實例化即自動執行完整認證流程
$msn = new myMSN("your_account@hotmail.com", "your_password");
// 此處可擴充:發送訊息、獲取好友列表、狀態更新等
// 需實作 SYN、CHG、ADD 等後續指令
?>