posts - 1,  comments - 25,  trackbacks - 0
          POP3協(xié)議命令原始碼及工作原理
          http://www.linuxforum.net Jephe Wu (2001-04-21 18:17:49)
          一 簡介:

          1. POP適用于C/S結構的脫機模型的電子郵件協(xié)議,目前已發(fā)展到第三版,稱POP3。脫機模型即不能在線
             操作,不像IMAP4(netscape支持IMAP4)

          2. 當客戶機與服務器連接并查詢新電子郵件時,被該客戶機指定的所有將被下載的郵件都將被程序下載到
             客戶機,下載后,電子郵件客戶機就可以刪除或修改任意郵件,而無需與電子郵件服務器進一步交互。

          3. POP3客戶向POP3服務器發(fā)送命令并等待響應,POP3命令采用命令行形式,用ASCII碼表示。
             服務器響應是由一個單獨的命令行組成,或多個命令行組成,響應第一行以ASCII文本+OK或-ERR指出相應
             的操作狀態(tài)是成功還是失敗

          4. 在POP3協(xié)議中有三種狀態(tài),認可狀態(tài),處理狀態(tài),和更新狀態(tài)。
             當客戶機與服務器建立聯(lián)系時,一旦客戶機提供了自己身份并成功確認,即由認可狀態(tài)轉入處理狀態(tài),
             在完成相應的操作后客戶機發(fā)出quit命令,則進入更新狀態(tài),更新之后最后重返認可狀態(tài)。如下圖

           等待連接        身份確認         quit命令
             ——  |認可|————— |處理|——————|更新|
                     |__________________________________|
                            重返認可狀態(tài)

          5. 認可狀態(tài)的命令語句
             一般情況下,大多數(shù)現(xiàn)有的POP3客戶與服務器執(zhí)行采用ASCII明文發(fā)送用戶名和口令,在認可狀態(tài)等
          待客戶連接的情況下,客戶發(fā)出連接,并由命令user/pass對在網絡上發(fā)送明文用戶名和口令給服務器
          進行身份確認。一旦確認成功,便轉入處理狀態(tài)。
              為了避免發(fā)送明文口令的問題,有一種新的認證方法,命令為APOP,使用APOP,口令在傳輸之前被加密。
          當?shù)谝淮闻c服務器連接時,POP3服務器向客戶機發(fā)送一個ASCII碼問候,這個問候由一串字符組成對每個客
          戶機是唯一的,與當時的時間有關,然后,客戶機把它的純文本口令附加到從服務器接收到的字符串之后,
          然后計算出結果字符串的MD5單出函數(shù)消息摘要,客戶機把用戶名與MD5消息摘要作為APOP命令的參數(shù)一起發(fā)送
          出去。
              目前,大多數(shù)windows上的郵件客戶軟件不支持APOP命令,qpopper支持。

          6. POP3命令碼如下:
           命令          參數(shù)       狀態(tài)     描述
          ------------------------------------------
          USER          username    認可     此命令與下面的pass命令若成功,將導致狀態(tài)轉換
          PASS          password    認可     
          APOP          Name,Digest 認可     Digest是MD5消息摘要
          ------------------------------------------
          STAT          None        處理     請求服務器發(fā)回關于郵箱的統(tǒng)計資料,如郵件總數(shù)和總字節(jié)數(shù)
          UIDL          [Msg#]      處理     返回郵件的唯一標識符,POP3會話的每個標識符都將是唯一的
          LIST          [Msg#]      處理     返回郵件數(shù)量和每個郵件的大小
          RETR          [Msg#]      處理     返回由參數(shù)標識的郵件的全部文本
          DELE          [Msg#]      處理     服務器將由參數(shù)標識的郵件標記為刪除,由quit命令執(zhí)行
          RSET          None        處理     服務器將重置所有標記為刪除的郵件,用于撤消DELE命令
          TOP           [Msg#]      處理     服務器將返回由參數(shù)標識的郵件前n行內容,n必須是正整數(shù)
          NOOP          None        處理     服務器返回一個肯定的響應
          ------------------------------------------
          QUIT          None        更新     

          a.客戶機希望結束這次會話
          b.如果服務器處于‘處理’狀態(tài),那么將進入‘更新’狀態(tài)以刪除任何標記為刪除的郵件
          c.導致由處理狀態(tài)到更新狀態(tài),又重返認可狀態(tài)的轉變
          d.如果這個命令發(fā)出時服務器處于‘認可’狀態(tài),則結束會話,不進行‘更新’狀態(tài)。

          7. POP3協(xié)議在TCP/110端口上等待客戶連接請求。

          8. 若密碼為明文,我如何監(jiān)聽?
          下面的命令在服務器運行后在屏幕上顯示POP3連接及命令發(fā)送的過程:
          #sniffit -a -A. -p 110 -b -s 192.169.11.12 
             note: 192.168.11.12是客戶機IP地址
                   你需要事先安裝sniffit這個端口監(jiān)聽程序

          9. 考慮這種情況,若客戶在收取郵件時,假定為15封信等待接收,但由于線路問題,收到第10封時斷線了,
             為什么下次收時仍然從第一封開始,也即為什么前10封沒有被從服務器上刪除掉?
             
          任何郵件的刪除都必須在quit命令發(fā)出后對已標記為刪除的郵件執(zhí)行刪除操作,由于中途斷線,仍處于
          處理狀態(tài),沒有機會執(zhí)行quit命令以進行狀態(tài)轉換。

          10. pop3 session is locked by another session, please wait 10 minutes then try again.

          由于非正常操作引起POP3程序內部機制鎖住該次會話。

          11. Foxmail與OE(outlook express)的處理機制的不同。
           
          a. 假定服務器上有三封郵件等待客戶機接收。用foxmail與OE的不同之處在于
             foxmail每收一封標記刪除一封,而OE則等全部接收完后再全部標記為刪除最后執(zhí)行quit命令。

                 Foxmail           OE
            -------------------------------
                 retr 1            retr 1
                 dele 1            retr 2
                 retr 2            retr 3
                 dele 2            dele 1
                 retr 3            dele 2
                 dele 3            dele 3
                 quit              quit
          b. Foxmail的遠程郵件管理是非常優(yōu)秀的管理工具,假定服務器上有三封信,對第一封,我們不想接收
             想從服務器直接刪除;對第二封,想接收但不刪除,對第三封,這一次不想接收,分別標記后
             最后foxmail發(fā)出的命令是

              dele 1
              retr 2
              quit

          c. 若沒有foxmail,正好有幾封很大的信堵住了,我不想接收,想直接刪除它,或者想查看這兩封是誰發(fā)的?

              直接在windows的DOS窗口下用命令行操作,如:
            # telnet my.isp.net  110
             user 'username'
             pass 'password'
             list
             dele 3
             dele 5
             quit

          posted on 2006-05-08 19:30 Daniel 閱讀(161) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網站導航:
           
          <2006年5月>
          30123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(3)

          隨筆檔案

          文章分類

          文章檔案

          相冊

          搜索

          •  

          最新評論

          主站蜘蛛池模板: 赤壁市| 台江县| 寿阳县| 施秉县| 苗栗县| 高要市| 漠河县| 会东县| 呼玛县| 桐庐县| 正安县| 罗甸县| 仪陇县| 区。| 天等县| 郸城县| 汨罗市| 桓台县| 漠河县| 措勤县| 耒阳市| 安义县| 壶关县| 大悟县| 玉田县| 曲周县| 武鸣县| 富川| 长沙市| 皋兰县| 涟源市| 西宁市| 明星| 长兴县| 澄迈县| 双柏县| 桑日县| 惠水县| 区。| 攀枝花市| 平远县|