1、典型剖析:MSN登錄實例
一般來說,用戶微機上的程序統(tǒng)稱為MSN Messenger“客戶端”,它通過Internet連接到一個MSN Messenger“服務(wù)器”。也就是說,客戶端通過服務(wù)器與其他客戶端交互信息。在大多數(shù)時間里,用戶的客戶端與服務(wù)器會話,然后由服務(wù)器來處理這些會話信息并通知其他人。了解之前,我們使用Sniffer NT來截獲登錄時的數(shù)據(jù)。
從截獲的登錄數(shù)據(jù)中,我們可以看到,在“數(shù)據(jù)”一欄中,有很多類似CVR、VER、USR等開頭的數(shù)據(jù),登錄連接時還用到了TCP/1863和TCP/443這兩個端口,它們記錄了MSN Messenger登錄的整個過程。在圖中,我們看到了這樣一條記錄:“VER 145 MSNP11 MSNP10 CVR0”。
要回答這個問題,我們首先就要談到MSN Messenger協(xié)議了。1999年,Microsoft向IETF(Internet Engineering Steering Group,國際互聯(lián)網(wǎng)工程任務(wù)組,是世界上做互聯(lián)網(wǎng)方面技術(shù)標(biāo)準的組織)提交了一份“MSN Messenger Service 1.0 Protocol”草案,這是最初版本的MSN Messenger協(xié)議,不同的協(xié)議經(jīng)常被寫為“MSNP9”、“MSNP10”、“MSNP11”等。近幾年中,MSN已經(jīng)歷經(jīng)數(shù)次修訂,目前MSN Messenger的協(xié)議已經(jīng)到了第12版,簡稱MSNP12?,F(xiàn)在,我們使用比較廣泛的MSN7.0支持的協(xié)議是MSNP10和MSNP11,出于規(guī)范的需要,MSN Messenger用戶必須升級到較高的版本,因為服務(wù)器對MSNP8以下的版本已經(jīng)不再支持。這就是我們在剛才截獲的數(shù)據(jù)中,為什么可以看到“MSNP11 MSNP10”的緣故了。
那么,CVR、VER、USR這些數(shù)據(jù)是什么意思呢?客戶端與服務(wù)器間信息都是以命令格式傳遞的。命令被描述為三個字符、所有字母大寫的命令代號。所有一般命令都有一個事務(wù)ID并且以新行結(jié)束??蛻舳税l(fā)送的命令一般會使服務(wù)器響應(yīng)一個及以上的命令。這些數(shù)據(jù)是MSN Messenger命令,它們使用了純ASCII碼,同時對非ASCII碼字符使用URL編碼。命令的語法如下:
XXX [ TrID PARAM1 PARAM2…]
其中,是空白字符,是回車換行,XXX是一個3字符的命令串,TrID是一個流水號,PARAMx是參數(shù),[ ]內(nèi)是可選項。關(guān)于這些命令的含義,可以參考下表(列舉部分):
命令 來源 去向 說明
CHG Client NS 發(fā)出改變狀態(tài)的請求。
NS Client 返回改變狀態(tài)的應(yīng)答。
CHL NS Client 服務(wù)器發(fā)出驗證要求。
SS Client
CVR Client NS 發(fā)出客戶端的OS、語言、MSN Messenger版本等信息。對于官方客戶端來說,服務(wù)器會響應(yīng)建議用戶使用的客戶端版本信息。
Client SS
NS Client 返回推薦的MSN Messenger版本、升級軟件需要的下載地址等信息。
SS Client
INF Client NS 詢問服務(wù)器所支持的認證方式。
Client SS
NS Client 返回服務(wù)器所支持的認證方式。
SS Client
MSG Client SS 發(fā)送消息到其他用戶(聊天對象)。
NS Client 傳遞服務(wù)器(系統(tǒng))的消息到客戶端。
SS Client 傳遞其他用戶(聊天對象)的消息到客戶端。
SYN Client NS 客戶端-服務(wù)器同步。
NS Client
URL Client NS 發(fā)出獲取MSN服務(wù)URL的請求。
NS Client 返回獲取URL請求的應(yīng)答。
USR All All 聲明、傳遞、鑒別用戶身份。
VER Client DS 協(xié)商MSN Messenger協(xié)議版本。
Client NS
DS Client
NS Client
XFR DS Client 向客戶端分配NS(通知客戶端轉(zhuǎn)向連接指定的NS)。
Client NS 發(fā)出分配SS的請求。
NS Client 返回分配SS請求的應(yīng)答。
這樣,當(dāng)我們看到“CVR 146 0x0804 winnt 5.0 i386 MSNMSGR 7.0.0777 msmsgs cndes2005@hotmail.com”時,就可以知道,現(xiàn)在客戶端正發(fā)出OS、語言、MSN Messenger版本等信息?,F(xiàn)在,聰明的讀者可能會思考:在這些表中,我們看到了DS、NS、SS等代表來源和去向的服務(wù)器,他們又有什么特殊的意義呢?簡單介紹如下:
派遣服務(wù)器(Dispatch Server,簡稱DS服務(wù)器)。這是客戶端最初連接的服務(wù)器,負責(zé)給客戶端分配合適的通知服務(wù)器。域名是messenger.hotmail.com,標(biāo)準服務(wù)端口是1863。完成派遣任務(wù)后,切斷TCP連接。
通知服務(wù)器(Notification Server,簡稱NS服務(wù)器)。通知服務(wù)器的目的主要就是保留用戶的在線信息,還有其他用戶所關(guān)心的重要人員的信息。包括登錄、改變狀態(tài)、獲取用戶列表、修改用戶信息、發(fā)起聊天、接受呼叫、郵件通知、退出等等。通知服務(wù)器同樣也提供其他通知服務(wù),如hotmail的新郵件提示和創(chuàng)建或者加入會話等。服務(wù)端口由派遣服務(wù)器指定,通常也是1863。
接線服務(wù)器(Switchboard Server,簡稱SS服務(wù)器)。這里保存了各人員的即時會話信息,換句話說,每個MSN中的用戶對應(yīng)連接到一個共享交換板的會話中。因此,這里也可以看作客戶端之間聊天使用的中轉(zhuǎn)服務(wù)器。每開一個聊天窗口,客戶端和服務(wù)器就建立一個TCP會話。當(dāng)客戶端之間需要進行文件傳輸或語音聊天時,發(fā)送系統(tǒng)消息,建立“點對點”會話通道(可能轉(zhuǎn)為使用UDP),服務(wù)端口通常也是1863?!包c對點”通信使用的端口由客戶端自動協(xié)商決定,如文件傳輸通常使用6891端口。
一般來說,用戶微機上的程序統(tǒng)稱為MSN Messenger“客戶端”,它通過Internet連接到一個MSN Messenger“服務(wù)器”。也就是說,客戶端通過服務(wù)器與其他客戶端交互信息。在大多數(shù)時間里,用戶的客戶端與服務(wù)器會話,然后由服務(wù)器來處理這些會話信息并通知其他人。了解之前,我們使用Sniffer NT來截獲登錄時的數(shù)據(jù)。
從截獲的登錄數(shù)據(jù)中,我們可以看到,在“數(shù)據(jù)”一欄中,有很多類似CVR、VER、USR等開頭的數(shù)據(jù),登錄連接時還用到了TCP/1863和TCP/443這兩個端口,它們記錄了MSN Messenger登錄的整個過程。在圖中,我們看到了這樣一條記錄:“VER 145 MSNP11 MSNP10 CVR0”。
要回答這個問題,我們首先就要談到MSN Messenger協(xié)議了。1999年,Microsoft向IETF(Internet Engineering Steering Group,國際互聯(lián)網(wǎng)工程任務(wù)組,是世界上做互聯(lián)網(wǎng)方面技術(shù)標(biāo)準的組織)提交了一份“MSN Messenger Service 1.0 Protocol”草案,這是最初版本的MSN Messenger協(xié)議,不同的協(xié)議經(jīng)常被寫為“MSNP9”、“MSNP10”、“MSNP11”等。近幾年中,MSN已經(jīng)歷經(jīng)數(shù)次修訂,目前MSN Messenger的協(xié)議已經(jīng)到了第12版,簡稱MSNP12?,F(xiàn)在,我們使用比較廣泛的MSN7.0支持的協(xié)議是MSNP10和MSNP11,出于規(guī)范的需要,MSN Messenger用戶必須升級到較高的版本,因為服務(wù)器對MSNP8以下的版本已經(jīng)不再支持。這就是我們在剛才截獲的數(shù)據(jù)中,為什么可以看到“MSNP11 MSNP10”的緣故了。
那么,CVR、VER、USR這些數(shù)據(jù)是什么意思呢?客戶端與服務(wù)器間信息都是以命令格式傳遞的。命令被描述為三個字符、所有字母大寫的命令代號。所有一般命令都有一個事務(wù)ID并且以新行結(jié)束??蛻舳税l(fā)送的命令一般會使服務(wù)器響應(yīng)一個及以上的命令。這些數(shù)據(jù)是MSN Messenger命令,它們使用了純ASCII碼,同時對非ASCII碼字符使用URL編碼。命令的語法如下:
XXX [ TrID PARAM1 PARAM2…]
其中,是空白字符,是回車換行,XXX是一個3字符的命令串,TrID是一個流水號,PARAMx是參數(shù),[ ]內(nèi)是可選項。關(guān)于這些命令的含義,可以參考下表(列舉部分):
命令 來源 去向 說明
CHG Client NS 發(fā)出改變狀態(tài)的請求。
NS Client 返回改變狀態(tài)的應(yīng)答。
CHL NS Client 服務(wù)器發(fā)出驗證要求。
SS Client
CVR Client NS 發(fā)出客戶端的OS、語言、MSN Messenger版本等信息。對于官方客戶端來說,服務(wù)器會響應(yīng)建議用戶使用的客戶端版本信息。
Client SS
NS Client 返回推薦的MSN Messenger版本、升級軟件需要的下載地址等信息。
SS Client
INF Client NS 詢問服務(wù)器所支持的認證方式。
Client SS
NS Client 返回服務(wù)器所支持的認證方式。
SS Client
MSG Client SS 發(fā)送消息到其他用戶(聊天對象)。
NS Client 傳遞服務(wù)器(系統(tǒng))的消息到客戶端。
SS Client 傳遞其他用戶(聊天對象)的消息到客戶端。
SYN Client NS 客戶端-服務(wù)器同步。
NS Client
URL Client NS 發(fā)出獲取MSN服務(wù)URL的請求。
NS Client 返回獲取URL請求的應(yīng)答。
USR All All 聲明、傳遞、鑒別用戶身份。
VER Client DS 協(xié)商MSN Messenger協(xié)議版本。
Client NS
DS Client
NS Client
XFR DS Client 向客戶端分配NS(通知客戶端轉(zhuǎn)向連接指定的NS)。
Client NS 發(fā)出分配SS的請求。
NS Client 返回分配SS請求的應(yīng)答。
這樣,當(dāng)我們看到“CVR 146 0x0804 winnt 5.0 i386 MSNMSGR 7.0.0777 msmsgs cndes2005@hotmail.com”時,就可以知道,現(xiàn)在客戶端正發(fā)出OS、語言、MSN Messenger版本等信息?,F(xiàn)在,聰明的讀者可能會思考:在這些表中,我們看到了DS、NS、SS等代表來源和去向的服務(wù)器,他們又有什么特殊的意義呢?簡單介紹如下:
派遣服務(wù)器(Dispatch Server,簡稱DS服務(wù)器)。這是客戶端最初連接的服務(wù)器,負責(zé)給客戶端分配合適的通知服務(wù)器。域名是messenger.hotmail.com,標(biāo)準服務(wù)端口是1863。完成派遣任務(wù)后,切斷TCP連接。
通知服務(wù)器(Notification Server,簡稱NS服務(wù)器)。通知服務(wù)器的目的主要就是保留用戶的在線信息,還有其他用戶所關(guān)心的重要人員的信息。包括登錄、改變狀態(tài)、獲取用戶列表、修改用戶信息、發(fā)起聊天、接受呼叫、郵件通知、退出等等。通知服務(wù)器同樣也提供其他通知服務(wù),如hotmail的新郵件提示和創(chuàng)建或者加入會話等。服務(wù)端口由派遣服務(wù)器指定,通常也是1863。
接線服務(wù)器(Switchboard Server,簡稱SS服務(wù)器)。這里保存了各人員的即時會話信息,換句話說,每個MSN中的用戶對應(yīng)連接到一個共享交換板的會話中。因此,這里也可以看作客戶端之間聊天使用的中轉(zhuǎn)服務(wù)器。每開一個聊天窗口,客戶端和服務(wù)器就建立一個TCP會話。當(dāng)客戶端之間需要進行文件傳輸或語音聊天時,發(fā)送系統(tǒng)消息,建立“點對點”會話通道(可能轉(zhuǎn)為使用UDP),服務(wù)端口通常也是1863?!包c對點”通信使用的端口由客戶端自動協(xié)商決定,如文件傳輸通常使用6891端口。