我們可以把msn的工作機制分成兩個階段:
認證階段
認證階段包括登陸到msn即時通的伺服器並且取得好友列表
即時通訊階段
即時通訊階段包括傳送/接受進入即時通訊階段的請求和傳送/接受訊息。
msn即時通訊軟體的協議是基於ascii碼的協議,用其他話來講就是所有的命令都必
須是英文的!第乙個階段包括連線到msn即時通軟體的伺服器。在這個階段我們應該連線
到伺服器「messenger.hotmail.***」的1863埠(msn即時通訊軟體通過1863埠進行工作)。一旦連線上以後,我們就應該開始登陸過程了。此過程的第一步是驗證msn的版本。在此步中,客戶端(即你的msn軟體)列出及向伺服器傳送它可以支援的版本,然後等待伺服器的回應。
ver 0 msnp7 msnp6 msnp5 msnp4 cvro
在msn協議中,伴隨著每個命令都有乙個「試驗id」被傳送。此實驗id從0開始,並且當每次伺服器成功的對客戶端的命令做回應時,都會增加。
伺服器的回應如下
ver 0 msnp7 msnp6 msnp5 msnp4
現在客戶端(msn)和伺服器之間確定了它們之間將要進行通訊的版本。
下一步客戶端(msn)向伺服器傳送乙個請求,要求伺服器提供它所支援的認證時需要的安全包的名字。
inf 1
不像ahoo,rediff和其它的一些即時通訊軟體,msn在傳送密碼時會將密碼加密,保證如有人監控你的埠時,密碼不會輕易的洩露。
伺服器的回應如下
inf 1 md5 (md5在這裡是伺服器當前支援的安全包的名字)
下一步客戶端(msn)將向伺服器傳送使用者id
usr 2 md5 i venky_dude@hotmail.***
然後伺服器將檢驗它是否包含有驗證所需的此使用者的所有相關資訊。如沒有的話,伺服器將會傳送如下回應:
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 venky_dude@hotmail.***
現在我們連線上的伺服器有了此嘗試登陸的使用者的資訊.伺服器回應如下:
usr 5 md5 s 989048851.185113730
伺服器傳送的此字串是「md5 雜亂資訊」.此雜亂資訊由伺服器建立並且在認證過程中使用.客戶端然後向伺服器傳送使用md5運演算法加密後的密碼.實際上客戶端向伺服器傳送的是乙個獨一無二的md5字串,此字串等價於此「md5雜亂資訊」(即989048851.185113730)+密碼.結果如下
3b7926d277068ec49576a0c40598ff21
usr 6 md5 s 3b7926d277068ec49576a0c40598ff21
如果密碼正確,伺服器將做如下回應:
usr 6 ok venky_dude@hotmail.*** venkat
此處「venkat」是使用者的呢稱.
在此協議的最新版本中,伺服器將傳送一些附加的資料,像使用者的資訊和乙個認證碼(類似於乙個cookie,可以用到許多其它的功能中)
這個cvr命令的傳送並不是必須的,無論此命令是否傳送,msn協議都可以正確的工作.
*一旦有好友上線時,伺服器(ns)將向我們傳送如下命令
nln 10 nln dea***@hotmail.*** venkatesh
相反,如果有好友下線時,伺服器將向我們傳送如下命令
fln 10 fln dea***@hotmail.*** venkatesh
在msnp7中,msn引入了乙個新的口令認證機制.msn伺服器向使用者傳送乙個口令鑰,使用者必須正確的認證此口令鑰才能使此過程繼續進行下去.
chl 0 20881396011366812350
客戶端必須向伺服器傳送一md5,此md5為以上的「雜亂資訊」後附加上字串「q1p7w2e4j9r8u3s5」.因此最終向伺服器傳送的md5字串為
20881396011366812350q1p7w2e4j9r8u3s5
因此客戶端的回應如下
qry 18 m**sgs@msnmsgr.*** 32
0212eaad0876afb8505859ca75d21a78
此處18為實驗id,用你的實際實驗id代替18.
如果認證正確,伺服器將做出如下回應
qry 18
在msn裡的即時通訊是基於session的。想進行對話的兩個人必須在session模式當中。除非我們同其他使用者開始乙個聊天session,否則我們是不能傳送/接受資訊的。
基本上有兩種途徑可以使乙個使用者處於乙個聊天session中
.1 使用者向另乙個使用者傳送乙個聊天session請求
2 使用者接收從另乙個使用者那裡傳送來的聊天session請求
接下來將分別詳細介紹這兩種途徑
使用者向另乙個使用者傳送乙個聊天session請求
客戶端(使用者)向伺服器傳送乙個命令,以獲取接線總機(switchboard)伺服器的位址.所有的即時通訊交談都必須通過接線總機伺服器實現。
xfr9 sb
此接線總機伺服器返回此伺服器的ip位址,連線埠,和乙個cki雜列。cki 是乙個安全包,使用者必須使用此cki雜列連線上接線總機伺服器。
xfr9 sb 64.4.13.88:1863 cki1989487642.2070896604
現在這次我們將向接線總機伺服器進行一次新的連線。而且我們上次對msn即時通伺服器的連線必須要保持,否則我們將會登出。
在我們連線上接線總機伺服器之後,我們將向此接線總機伺服器傳送以下命令:
usr 1 venky_dude@hotmail.*** 989487642.2070896604
如果我們傳送的這個cki雜列正確的話,接線伺服器將會返回
usr 1 ok venky_dude@hotmail.*** venkat
當以上做完之後,接下來這個使用者要做的就是要把另乙個使用者」叫到」此聊天session中了,這可以通過傳送下面的命令完成
cal 2 dead***@hotmail.***
伺服器將會向此使用者回應乙個session號,同時也會將此session號傳送給另乙個使用者。
如果另乙個使用者準備好聊天,並向做出回應時,伺服器將向我們傳送如下命令
joi deadlee@hotmail.*** venkatesh
這條命令表示另乙個使用者加入了聊天當中,我們現在可以接受和傳送資訊了
使用者接收從另乙個使用者那裡傳送來的聊天session請求
當我們被乙個使用者邀請到乙個聊天session中時,認證伺服器將向我們傳送如下的資訊.
rng 11742066 64.4.13.74:1863 cki 989495494.750408580 dea***x@hotmail.*** venkatesh
上面的命令包含了session號,接線伺服器的ip位址,埠,cki雜列及向我們發出交談請求的使用者資訊。
現在我們將向接線伺服器進行一次新的連線。同樣我們上次對msn即時通伺服器的連線必須要保持,否則我們將會登出。
我們連線上接線伺服器,並且傳送如下命令
ans 1 venky_dude@hotmail.*** 989495494.750408580 11742066
上面的命令包含了我們的登陸名,我們接收到的cki雜列和session號.
伺服器將回應如下資訊
iro 1 1 1 dea***x@hotmail.*** venkatesh 和 ans 1 ok
我們現在就可以傳送和接收資訊了。
在我們傳送和接收資訊之前,讓我們了解一下資訊是如何建立的
我們傳送資訊時,將首先建立乙個頭資訊如下所示
mime-version: 1.0
content-type: text/plain; charset=utf-8
x-mms-im-format: fn=microsoft%20sans%20serif; ef=; co=0; cs=0; pf=22
然後使用如下的方式傳送
msg2 n137 mime-version: 1.0
content-type: text/plain; charset=utf-8
x-mms-im-format: fn=microsoft%20sans%20serif; ef=; co=0; cs=0; pf=22
hello
其中2是測試號,我們每傳送一次資訊,此號就會隨著增加。137是指我們傳送資訊的長度。在上面的例子中就是頭資訊和我們傳送的資訊」hello」的長度。
我們傳送的資訊和上面的例子是差不多的。
下面是我們接受到的乙個資訊的例子
msg dea***x@hotmail.*** venkatesh 137
mime-version: 1.0
content-type: text/plain; charset=utf-8
x-mms-im-format: fn=microsoft%20sans%20serif; ef=; co=0; cs=0; pf=22
hello
當另一使用者正在輸入資訊時,我們會收到如下資訊
msg dea***x@hotmail.*** venkatesh 100
mime-version: 1.0
content-type: text/x-m**sgscontrol
typinguser: dea***x@hotmail.***
我猜你們對如何編寫出自己的msn即時通訊軟體已經有了大致的了解。我將會在以後對msn的通訊協議繼續進行補充,增添一些附加的功能比如增加/刪除擁護,重新命名,檔案傳輸及語音聊天。
MSN登入協議
msnp15登入協議 也適用於msnp18 登入過程 命令序列 代表傳送,代表結果 1.連線ds dispatcher server 得到ns notification server 2.連線ns,進行登入 其中policy mbi key old,nonce cfznppivkoe2glnv6z3...
利用MSN協議開發
今天化了乙個下午的時間研究了一下msn的協議,對msn的協議注意了有很長的時間了,但是卻一直沒有親自做過什麼程式。前面有開心的msn,後來也給陳銳發過,今天決定自己做乙個程式連帶學習託管c 基於msn的開發其實非常簡單,關鍵是熟悉msn的協議,大家可以在這裡學習到詳細的msn協議的知識,唯一可惜的就...
HTTP協議頭部字段釋義
1 accept 告訴web伺服器自己接受什麼介質型別,表示任何型別,type 表示該型別下的所有子型別,type sub type。2 accept charset 瀏覽器申明自己接收的字符集 accept encoding 瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支援壓縮,支援什麼壓...