1.2?
MSN Messenger協議開發:認證階段
?
作者:汪俊杰
電子郵件:unicentre(at)gmail.com
QQ:10402488
?
MSN的認證階段包括登錄到MSN即時通訊服務器并且取得好友列表。
?
MSN即時通訊軟件的協議是基于ASCII碼的協議。第一個階段包括連接到MSN即時通軟件的服務器。在這個階段我們應該連接到服務器“messenger.hotmail.com”的1863端口(MSN即時通訊軟件通過1863端口進行工作)。一旦連接上以后,我們就可以一步步開始登錄過程了。
?
步驟1:
驗證MSN的版本。客戶端(即我們的MSN軟件)列出及向服務器發送它可以支持的版本,然后等待服務器的回應。
>>> VER 0 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
在MSN協議中,伴隨著每個命令都有一個
“
試驗ID
”
被發送。此實驗ID從0開始,并且當每次服務器成功的對客戶端的命令做回應時,都會增加。
服務器的回應如下
<<< VER 0 MSNP7 MSNP6 MSNP5 MSNP4
現在客戶端(MSN)和服務器之間確定了它們之間將要進行通訊的版本。
步驟2:
客戶端(MSN)向服務器發送一個請求,要求服務器提供它所支持的
認證時需要的安全包的名字。
>>> INF 1
MSN在發送密碼時會將密碼加密,保證如有人監控你的端口時,密碼不會輕易的泄露。
服務器的回應如下
<<< INF 1 MD5
MD5在這里是服務器當前支持的安全包的名字。
步驟3:
客戶端(MSN)將向服務器發送用戶ID
>>> USR 2 MD5 I ideal_wang@hotmail.com
然后服務器將檢驗它是否包含有驗證所需的此用戶的所有相關信息。如沒有的話,服務器將會發送如下回應:
<<< XFR 2 NS 64.4.13.55:1863 0
意思為客戶端(MSN)應該連接到NOTIFICATION服務器,地址和端口分別為64.4.13.55:1863。
我們關閉當前的連接并且在連接到新的服務器64.4.13.55時重復以下步驟
>>> VER 3 MSNP7 MSNP6 MSNP5 MSNP4 CVRO
<<< VER 3 MSNP7 MSNP6 MSNP5 MSNP4
>>> INF 4
<<< INF 4 MD5
>>> USR 5 MD5 I ideal_wang@hotmail.com
步驟4:
如果現在我們連接上的服務器有了此登錄的用戶的信息,服務器回應如下:
<<< USR 5 MD5 S 989048851.185113730
服務器發送的此字符串是“MD5 雜亂信息
”
。此雜亂信息由服務器創建并且在認證過程中使用。客戶端然后向服務器發送使用MD5運算法加密后的密碼。實際上客戶端向服務器發送的是一個獨一無二的MD5字符串,此字符串等價于此
“
MD5雜亂信息
”
(即989048851.185113730)+密碼,本例中MD5字符串是3b7926d277068ec49576a0c40598ff21。
>>> USR 6 MD5 S 3b7926d277068ec49576a0c40598ff21
如果密碼正確,服務器將做如下回應:
<<< USR 6 OK ideal_wang@hotmail.com Jun Jie
此處“Jun Jie
”
是用戶的呢稱.
MSN協議的最新版本中,服務器將發送一些附加的數據,像用戶的信息和一個認證碼(類似于一個cookie,可以用到許多其它的功能中):
<<< MSG Hotmail Hotmail 362
<<< MIME-Version:1.0
<<< Content-Type:text/x-msmsgspro file;charset=UT
<<< Login Time:1011252477
<<< EmailEnabled:1
<<< MemberIDHigh:84736
<<< MemberIDLow:-143472939
<<< Lang_preference:103
<<< PreferredEmail:ideal_wang@hotmail.com
<<< Country:IN
<<< PostalCode:
<<< Gender:M
<<< Kid
<<< Age:22
<<< Sid:517
<<< Kv:2
<<< MSPAuth:2AAAAAAAADU0p4uxxxJtDJozJS1UTS0i7YpwnCoPUHRv56YKxxxCTWmg$$
步驟5:
經過上述步驟我們登錄上了服務器,但是我們的狀態仍然是離線。為了能夠發送和接受信息,我們需要把我們的狀態改成在線。客戶端通過如下命令完成這步:
>>> CHG 7 NLN
服務器則向客戶端發送回在線的好友及其相應的狀態:
<<< ILN 7 NLN btxxxe@hotmail.com nick
<<< ILN 7 AWY wmxxe@hotmail.com mike
<<< ILN 7 BSY tehpxxp@hotmail.com jerry
<<< MSG Hotmail Hotmail 223
<<< MIME-Version:1.0
<<< Content-Type:text/x-msmsgsinitialemailnotification;charset=UTF-8
<<< Inbox-Unread:293
<<< Folders-Unread
<<< Inbox-URL:/cgi-bin/HoTMaiL
<<< Folders-URL:/cgi-bin/folders
<<< Post-URL:http://www.hotmail.com
步驟6:
向服務器發送的下一個命令是和當前使用的客戶端的版本相關的,客戶端向服務器發送它的版本號和所在機器的信息像操作系統和其配置等:
>>> CVR 8 0x0409 win 4.10 i386 MSMSGS 4.5.0127 MSMSGS
0x0409 win4.10 i386 指出客戶端當前的運行環境是win98,使用的是Intel的微處理器;MSMSGS 4.5.0127 MSMSGS 指出msmsgs.exe的版本號。
服務器回應提供下載最新版本及一些其它的信息的地址:
<<< CVR 8 4.5.0127 4.5.0127 1.0.0863
<<< http://download.microsoft.com/do ... /en-us/mmssetup.exe
<<< http://messenger.microsoft.com
這個CVR命令的發送并不是必須的,無論此命令是否發送,MSN協議都可以正確的工作.
?
為了獲得我們的好友列表,我們可以發送如下命令
>>> LST 9 RL
服務器將相應發送回“反向列表”,此反向列表為當你在線時,可以看到你并能向你發送即時消息的用戶列表。你也可以使用LST 9 FL命令向服務器請求
“
正向列表
”
,此正向列表包括你加入到好友列表中的所有好友。服務器所做的回應如下
<<< LST 9 RL 69 1 19 ideal_wang@hotmail.com venkat
<<< LST 9 RL 69 2 19 puxxxxx@hotmail.com puja
<<< LST 9 RL 69 3 19 vancxxxx@hotmail.com ramachandran
<<< LST 9 RL 69 4 19 moxxxxx@hotmail.com chandramouli
<<< LST 9 RL 69 6 19 v_n_xxxx@hotmail.com Narakatesh
<<< ........
<<< LST 9 RL 69 19 19 puneetagarxxx@hotmail.com puneet
?