POP3協議分析

2021-06-19 07:43:17 字數 4201 閱讀 4544

pop3協議分析

pop3全稱為post office protocol version3,即郵局協議第3版。它被使用者**用來郵件伺服器取得郵件。pop3採用的也是c/s通訊模型,對應的rfc文件為rfc1939。該協議非常簡單,所以我們只重點介紹其通訊過程,而相關的一些概念和術語請參考rfc文件或另外一篇文章《smtp協議分析》

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

1)使用者執行使用者**(如foxmail, outlook express)。

2)使用者**(以下簡稱客戶端)與郵件伺服器(以下簡稱伺服器端)的110埠建立tcp連線。

3)

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

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

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

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

pop3的命令不多,它的一般形式是:command  [parameter] 。其中command是ascii形式的命令名,parameter是相應的命令引數,是回車換行符(0dh, 0ah)。

伺服器響應是由乙個單獨的命令列組成,或多個命令列組成,響應第一行「+ok」或「-err」開頭,然後再加上一些ascii文字。「+ok」和「-err」分別指出相應的操作狀態是成功的還是失敗的。

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

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

---建立連線---|認可|--認證成功--|處理|--執行quit--|更新| 

|_______ -quit結束_________________|

圖1 pop3的狀態轉移圖

認可狀態

處理狀態

更新狀態

建立連線

執行quit

quit完畢

執行quit,釋放連線

認證成功

命令和響應的格式是語法,各命令和響應的意思則是語義,各命令和各響應在時間上的關係則是同步。我們還是通過以個簡單的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 後的長字串就是第一封郵件的唯一標誌符*/

*/ 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)

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。

id protocol

captured contents

user name

password

sender

receiver

subject

contents

attachments 5

pop3 √

√ √√ √

√ 表

2 pop3分析要求

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

[1]rfc文件:rfc1939對應pop3協議,rfc821對應smtp協議,rfc822對應郵件標準,rfc1425對應esmtp,rfc1522對應郵件首部的擴充,rfc1521對應郵件正文的擴充

[2]上面有全面的英文rfc文件

[3]上面有不少有用的協議分析文件,也有中文rfc文件,但質量不是特別高

[4]stevens, w.r., tcp/ip illustrated, vol1. addision-wesley, 機械工業出版社,

2002

POP3協議分析

pop3協議分析 pop3全稱為post office protocol version3,即郵局協議第3版。它被使用者 用來郵件伺服器取得郵件。pop3採用的也是c s通訊模型,對應的rfc文件為rfc1939。該協議非常簡單,所以我們只重點介紹其通訊過程,而相關的一些概念和術語請參考rfc文件或...

pop3協議簡介

8學院 vb教程 發布日期 2008年07月09日 將本文收藏到 收藏到本地 在internet,pop3 postofficeprotocol3 協議通常被用來接收電子郵件。這個協議很容易學,因為它只包含12個命令 其中有3個你完全可以忽略它們的存在 這些命令被客戶端計算機用來傳送給遠端伺服器。反...

協議 POP3簡單郵件傳輸協議

post office protocol version 3 郵局協議版本3 rfc1939 user username 認可 pass password 認可 執行成功則狀態轉換 apop name,digest 認可 一種安全傳輸口令的辦法,執行成功導 致狀態轉換,請參見rfc 1321 sta...