4. 無線區網監聽環境建置
4.4 通訊協定辨識
4.4.5 MSN
(1) MSN 協定特徵
MSN Messenger Service Protocol 是微軟提出的通訊服務協定,1999 年微軟 向 IETF 提交 1.0 版草案,此後就再也沒有公開過後續版本的細節。
1. 連線
協定建立在 TCP/IP 上,除了文件傳輸與語音聊天是 p2p 外,其它全都通過 伺服器進行。
伺服器主要有 3 種:
• Dispatch Server,派遣伺服器,簡稱 DS,客戶端最初連接的伺服器,負 責給客戶端分配合適的通知伺服器。有固定的域名與端口。完成派遣任 務後切斷 TCP 連接。(新版現在已經沒有 DS 了)
• Notification Server,通知伺服器,簡稱 NS,客戶端需要一直保持連接 的伺服器,很多任務都在這個會話內完成,但其不負責傳輸與訊息實體 相關的數據。
• Switchboard Server,接線伺服器,簡稱 SB,客戶端之間聊天使用的中 轉伺服器,每開一個聊天窗口,客戶端和伺服器就建立一個 TCP 會話。
開始聊天前,發起方必須先申請並連接這個伺服器。
2. 命令
MSN 的命令使用 ASCII 碼,遇到非 ASCII 碼字元就使用 URL 編碼。格式 基本是這樣的:
XXX TrID Param1 Param2 ... \r\n
命令以三個字元的命令 ID 開頭,例如 CAL、USR。TrID,全名為 Transaction ID,用在比對 Client 端的命令與 Server 端的回應(ACK)。 這是一個介於 0 到 4294967295 之間的整數,跟在每個命令與訊息後面,Server 端收到並做出處理 後,要回覆 Client 端,並附帶這個 ID,如此 Client 端就可以識別出伺服器是對 哪條命令的回應了。每次客戶端向伺服器發送一次命令或訊息後,TrID 自動加 1。
3. 承載資料命令(Payload Commands)
多數命令都是一行的,資料命令不同,它在命令後面會攜帶資料,Length 指明了後面資料的長度(不包括命令行本身)。此外資料後面不需要\r\n。基本格 式如下:
XXX TrID Param1 Param2 ... Length\r\n
\r\n Data
4. 訊息 Messages
訊息是一條以 MSG 開頭的 Payload Command,資料部分又分為 Header 和 Body。不同類型的訊息有不同的 Header,對即時訊息來說,比較重要的是 Content-Type 與 X-MMS-IM-Format,分別指定了訊息類型/編碼(通常是 UTF-8)
與格式資訊。Body 與 Header 之間以一個空行分隔,內容是 UTF-8 編碼格式的訊 息內容。
5. 接收即時訊息
接收的即時訊息是以如下形式由 SB 服務器發送到本機的:
MSG SenderEmail SendName Length\r\n MIME-Version: 1.0\r\n
Content-Type: text/plain; charset=UTF-8\r\n
X-MMS-IM-Format: FN=...; EF=...; CO=...; CS=...; PF=...\r\n \r\n
Message
關於 X-MMS-IM-Format 中的各項參數如下:
FN=Font,字體,要經過 URL 編碼。如新細明體是
%E6%96%B0%E7%B4%B0%E6%98%8E%E9%AB%94。
EF=Effects,字體特效,粗體或傾斜等,每種以一個字元標識,不區分順序。
CO=Color,顏色,16 進制 RGB 組合,如紅色是 ff0000。
CS=Character Set,字元集,預設為 UTF-8。
PF=Pitch and Family,與字元間距相關的一些格式設定。
6. 傳外訊息 (Outgoing messages)
新版 Windows Live Messenger ,已不使用,但還是相容舊版 MSN Messenger。
格式為:
MSG TrID TypeCode Length TypeCode 類型為分為 U、A、N:
• 若為 U,則發送端不會收到 ACK
• 若為 A,接收端正確收到訊息,則接收端會自動發回 ACK 給發送端
• 若為 N,接收端未正確收到訊息,則接收端會自動發回 ACK 給發送端 細部規格在此不詳細描述,可參照 MSN Messenger Service 1.0 Protocol 以及 (參考
http://www.hypothetic.org/docs/msn/index.php)。MSN messenger 通常使用
TCP port 1863,且判斷 MSN 文字訊息協定識別正規表示式如下:(參考
http://l7-filter.sourceforge.net/layer7-protocols/protocols/msnmessenger.pat)。
ver [0-9]+ msnp[1-9][0-9]? [\x09-\x0d -~]*cvr0\x0d\x0a$|usr 1 [!-~]+
[0-9. ]+\x0d\x0a$|ans 1 [!-~]+ [0-9. ]+\x0d\x0a$
而 MSN 傳送檔案識別正規表示式如下:
(參考:http://www.hypothetic.org/docs/msn/client/file_transfer.php)。
msn-filetransfer
^(ver [ -~]*msnftp\x0d\x0aver msnftp\x0d\x0ausr|method msnmsgr:)
其中 msnftp 為舊版 MSN 傳送檔案的協定規格表示方式,表示式的第二部 份可辨別更新的 MSNSLP 規格,表 25 僅列出本範例使用之命令:
(參考
http://msnpiki.msnfanatic.com/index.php/MSNC:MSNSLP)。
表 25: MSN 命令 Command From To Description
ANS Client Switchboard Accepts a request for a switchboard server session.
IRO Switchboard Client Provides the initial roster information for new users joining the session.
MSG Client Switchboard Sends a message to the members of the current session.
MSG Notification, Switchboard
Client Delivers a message from Switchboard another client or from a server-side component.
(2) MSN 範例
以 User: [email protected] 與
[email protected] 作為範例。
其中
[email protected] 使用者使用 Windows Live Messenger 而 [email protected] 使用 Gaim 作為 MSN 用戶端。圖 29 為使用者進行
MSN 連線。表 26 則為此 MSN 連線範例之通訊訊息。圖 29: MSN 連線畫面 表 26: MSN 通訊訊息 MSG [email protected]
*helpStay%20hungry,%20stay%20foolish.%20::...
%20Giovanni.Ferria 96 MIME-Version: 1.0
Content-Type: text/x-msmsgscontrol TypingUser: [email protected]
*helpStay%20hungry,%20stay%20foolish.%20::...
%20Giovanni.Ferria 155 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=%E6%96%B0%E7%B4%B0%E6%98%8E%E9%AB%94;
EF=; CO=80; CS=88; PF=12
hahahaha!
*helpStay%20hungry,%20stay%20foolish.%20::...
%20Giovanni.Ferria 96 MIME-Version: 1.0
Content-Type: text/x-msmsgscontrol TypingUser: [email protected]
等 同 於 MSN 視 窗 介 面 顯 示 , 用 戶 正 在 輸 入 文 字 之 通 知 事 件 (MSN Notification)。通知目前某使用者正在輸入訊息之樣式為:
MSG + MSN 帳號 + MSN 暱稱 MIME-Version: MIME 版本號
Content-Type: text/x-msmsgscontrol (MSN 控制訊息) TypingUser: 目前正在輸入聊天文字的使用者帳號 下面協定區塊描述使用者送出的聊天訊息:
*helpStay%20hungry,%20stay%20foolish.%20::...%20Giovanni.Ferria 155 MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
X-MMS-IM-Format: FN=%E6%96%B0%E7%B4%B0%E6%98%8E%E9%AB%94; EF=; CO=80; CS=88;
PF=12
hahahaha!
其格式為:
MSG + MSN 帳號 + MSN 暱稱 MIME-Version: MIME 版本號
Content-Type: text/plain; charset=UTF-8 內容型態 與編碼型態
X-MMS-IM-Format: FN=%E6%96%B0%E7%B4%B0%E6%98%8E%E9%AB%94; EF=; CO=80; CS=88;
PF=12