POP3協議分析

來源:互聯網
上載者:User

POP3協議分析

第1章.    POP3概述

POP3全稱為Post Office Protocol version3,即郵局協議第3版。它被使用者代理程式用來郵件伺服器取得郵件。POP3採用的也是C/S通訊模型,對應的RFC文檔為RFC1939。該協議非常簡單,所以我們只重點介紹其通訊過程,而相關的一些概念和術語請參考RFC文檔或另外一篇文章《SMTP協議分析》

第2章.    POP3詳解2.1.  通訊過程

使用者從郵件伺服器上內送郵件的典型通訊過程如下。

1)       
使用者運行使用者代理程式(如Foxmail, Outlook Express)。

2)       
使用者代理程式(以下簡稱用戶端)與郵件伺服器(以下簡稱伺服器端)的110連接埠建立TCP串連。

3)       
用戶端向伺服器端發出各種命令,來請求各種服務(如查詢郵箱資訊,下載某封郵件等)。

4)       
服務端解析使用者的命令,做出相應動作並返回給用戶端一個響應。

5)       
3)和4)交替進行,直到接收完所有郵件轉到步驟6),或兩者的串連被意外中斷而直接退出。

6)       
使用者代理程式解析從伺服器端獲得的郵件,以適當地形式(如可讀)的形式呈現給使用者。

其中2)、3)和4)用POP3協議通訊。可以看出命令和響應是POP3通訊的重點,我們將予以重點講述。

2.2.  命令和響應2.2.1. 
格式

POP3的命令不多,它的一般形式是:COMMAND  [Parameter] <CRLF>。其中COMMAND是ASCII形式的命令名,Parameter是相應的命令參數,<CRLF>是斷行符號分行符號(0DH, 0AH)。

伺服器響應是由一個單獨的命令列組成,或多個命令列組成,響應第一行“+OK”或“-ERR”開頭,然後再加上一些ASCII文本。“+OK”和“-ERR”分別指出相應的操作狀態是成功的還是失敗的。

2.2.2. 
三個狀態

POP3協議中有三種狀態,認正狀態,處理狀態,和更新狀態。 命令的執行可以改變協議的狀態,而對於具體的某命令,它只能在具體的某狀態下使用,這些請參看錶1和RFC193。

客戶機與伺服器剛與伺服器建立串連時,它的狀態為認證狀態;一旦客戶機提供了自己身份並被成功地確認,即由認可狀態轉入處理狀態; 在完成相應的操作後客戶機發出QUIT命令(具體說明見後續內容),則進入更新狀態,更新之後又重返認可狀態;當然在認可狀態下執行QUIT命令,可釋放串連。狀態間的轉移 1所示。

---建立串連---|認可|--認證成功--|處理|--執行QUIT--|更新| 
                  |_______ -QUIT結束_________________|


  

圖1 POP3的狀態轉移圖

認可狀態

處理狀態

更新狀態

建立串連

執行QUIT

QUIT完畢

執行QUIT,釋放串連

認證成功

2.2.3. 
一個例子

命令和響應的格式是文法,各命令和響應的意思則是語義,各命令和各響應在時間上的關係則是同步。我們還是通過以個簡單的POP3通訊過程來說明協議的這三個要素。

C:telnet pop3.126.com 110   /* 以telnet方式串連126郵件伺服器 */

S:+OK Welcome to coremail Mail Pop3 Server (126coms[3adb99eb4207ae5256632eecb8f8b4855]) /* +OK,代表命令成功,其後的資訊則隨伺服器的不同而不同*/

C:USER bripengandre /* 採用明文認證 */

S:+OK core mail

C:PASS Pop3world /* 發送郵箱密碼 */

S:+OK 654 message(s) [30930370 byte(s)] /* 認證成功,轉入處理狀態 */

C:LIST 1 /* 顯示第一封郵件的資訊 */

S:+OK 1 5184 ./* 第一封郵件的大小為5184 位元組 */

C:UIDL 1 /* 返回第一封郵件的唯一識別碼 */

S:+OK 1 1tbisBsHaEX9byI9EQAAsd /* 數字1 後的長字串就是第一封郵件的唯一標誌符 */

C:RETR 1 /* 下載第一封郵件 */

S:+OK 5184 octets /* 第一封郵件的大小為5184位元組 */

S:Receive…  /* 第一封郵件的具體內容 */

S:…

C:QUIT /* 轉入更新狀態,接著再轉入認證狀態 */

S:+OK

C: QUIT /* 退出串連 */

S:+OK core mail /* 成功地退出了串連 */

對於上述的過程,補充如下幾點內容。

1)       
“C:”開頭的行(不包括"C:")是用戶端的輸入,而以“S:”開頭的行(不包括"S:")則是伺服器的輸出。

2)       
上述的命令並不一定會一次性成功,伺服器會返回錯誤響應(以“-ERR”開頭),用戶端應該按照協議規定的時序,來輸入後續的命令(或重複執行失敗的命令,或重設會話,或退出會話等等)。

3)       
上述過程是示意性的,實際過程可能與其有較大不同。例如,實際過程中可能使用加密認證(MD5摘要認證)。

4)       
RETR下載下來的郵件可能會難以看懂,這是因為其可能使用了quoted-printable編碼或base64編碼,我們可用Foxmail等使用者代理程式軟體來解碼它。

2.2.4. 
常用命令和響應

SMTP命令不區分大小寫,但參數區分大小寫,有關這方面的詳細說明請參考RFC1939。常用的命令如表 1所示。

命令

參數

使用在何種狀態中

描述

USER

Username

認證

此命令與下面的pass命令若成功,將導致狀態轉換

PASS

Password

認證

此命令若成功,狀態轉化為更新

APOP

Name,Digest

認證

Digest是MD5訊息摘要

STAT

None

處理

請求伺服器發回關於郵箱的統計資料,如郵件總數和總位元組數

UIDL

[Msg#](郵件號,下同)

處理

返回郵件的唯一識別碼,POP3會話的每個標識符都將是唯一的

LIST

[Msg#]

處理

返回郵件的唯一識別碼,POP3會話的每個標識符都將是唯一的

RETR

[Msg#]

處理

返回由參數標識的郵件的全部文本

DELE

[Msg#]

處理

伺服器將由參數標識的郵件標記為刪除,由QUIT命令執行

TOP

[Msg#]

處理

伺服器將返回由參數標識的郵件的郵件標頭+前n行內容,n必須是正整數

NOOP

None

處理

伺服器返回一個肯定的響應,用於測試連接是否成功

QUIT

None

處理、認證

1)       
如果伺服器處於“處理”狀態,麼將進入“更新”狀態以刪除任何標記為刪除的郵件,並重返“認證”狀態。

2)       
如果伺服器處於“認證”狀態,則結束會話,退出串連

表1 POP3的常用命令

至於響應則如2.2.1所述,由“+OK”或“-ERR”開頭,後跟一些可讀的說明和一些其它參數(對RETR,這個參數就是郵件的內容)。更詳細的說明請參考RFC1939。

第3章.    POP3 VS IMAP

POP3相對於網際網路報文存取協議IMAP(Internet Message Access Protocol)的最大的不足是:它只是一個離線協議,客戶與伺服器的互動性不是特別好。例如不能直接在郵箱中建立檔案夾,不太好選擇性地下載郵件的某部分(雖然TOP命令部分地實現了這個功能,但互動性不是很好)等。然而,它也有自己的優勢,那就是協議簡單,容易實現,成本低,這是POP3用得很廣泛而IMAP幾近淘汰的最重要的原因。

第4章.    實現方案

ID

Protocol

Captured contents

user name

password

sender

receiver

subject

contents

attachments

5

POP3

 

表2 POP3分析要求

表 2給出了協議分析要求。容易看出,擷取各個欄位是比較容易的。我們可以抓取用戶端與伺服器端的互動資訊,然後根據各命令字或響應字來提取出我們想要的欄位。例如,要擷取user name,對於明文驗證,我們只需檢測到用戶端的發送資訊中出現USER這個時候,然後提取出USER命令後的參數即可。需要說明的是,雖然用戶端與服務端互動的資訊可能經過了編碼或加密,但我們仍能夠通過解碼或解密來獲得所需要的資訊。

第5章.    參考資料

[1]     
RFC文檔:RFC1939對應POP3協議,RFC821對應SMTP協議,RFC822對應郵件標準,RFC1425對應ESMTP,RFC1522對應郵件首部的擴充,RFC1521對應郵件內文的擴充

[2]     

http://www.faqs.org/rfcs/,上面有全面的英文RFC文檔

[3]     

http://www.cnpaf.net/,上面有不少有用的協議分析文檔,也有中文RFC文檔,但品質不是特別高

[4]     
Stevens, W.R., TCP/IP Illustrated, Vol1. Addision-Wesley, 機械工業出版社,2002

 

轉自:http://blog.csdn.net/bripengandre/article/details/2192111

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.