pop3&smtp

pop3&smtp

pop3

Post Office Protocol - Version 3html

pop3協議是離線郵件協議,是客戶端取郵件用的。安全

默認監聽在TCP:110端口.服務器

POP3會話有3個狀態AUTHORIZATION、TRANSACTION和UPDATE不一樣狀態能用的命令不一樣。dom

            等待鏈接 身份確認 quit命令測試

            —— |AUTHORIZATION|————— |TRANSACTION|——————|UPDATE|ui

            |________________________________________________________|編碼

            重返承認狀態加密

 POP3命令碼以下:spa

命令(ascII字符) 參數 狀態 描述
USER username AUTHORIZATION 用戶名
PASS password AUTHORIZATION 密碼,若成功,將致使狀態轉換
APOP username Digest(加密後密碼) AUTHORIZATION Digest是MD5消息摘要
STAT none TRANSACTION 請求服務器發回關於郵箱的統計資料,如郵件總數和總字節數
UIDL(unique-id listing) [message] TRANSACTION 返回郵件的惟一標識符,POP3會話的每一個標識符都將是惟一的
LIST [message] TRANSACTION 返回郵件數量和每一個郵件的大小
RETR(retrieve) [message] TRANSACTION 返回由參數標識的郵件的所有文本
DELE [message] TRANSACTION 服務器將由參數標識的郵件標記爲刪除,會話進入UPDATE後刪除
RSET [message] TRANSACTION 服務器將重置全部標記爲刪除的郵件,用於撤消DELE命令
TOP [message] TRANSACTION 服務器將返回由參數標識的郵件前n行內容,n必須是正整數
NOOP [message] TRANSACTION 服務器返回一個確定的響應
QUIT none UPDATE pop3服務器刪除標記爲deleted的郵件,不管錯誤與否,釋放獨佔鎖、關閉TCP鏈接

wireshark抓包:第一張爲開始,第二章爲結束.net

SMTP

SMTP工做在兩種狀況下

  1. 發件人客戶端傳輸到服務器
  2. 郵件服務器向另外一個郵件服務器傳輸郵件

smtp是個請求/響應協議,命令和響應都是基於ascii文本,並以cr和lf符結束。響應包括一個表示返回狀態的三位數字代碼。

網圖,來自https://blog.csdn.net/bripengandre/article/details/2191048

模型

-------------------------------------------------------------

   
               +----------+                +----------+
   +------+    |          |                |          |
   | User |<-->|          |      SMTP      |          |
   +------+    |  Sender- |Commands/Replies| Receiver-|
   +------+    |   SMTP   |<-------------->|    SMTP  |    +------+
   | File |<-->|          |    and Mail    |          |<-->| File |
   |System|    |          |                |          |    |System|
   +------+    +----------+                +----------+    +------+
   

                Sender-SMTP                Receiver-SMTP

     -------------------------------------------------------------

命令格式

COMMAND [Parameter] 。其中COMMAND是ASCII形式的命令名,Parameter是相應的命令參數, 是回車換行符(0DH, 0AH)。

XXX Readable Illustration。XXX是三位十進制數;Readable Illustration是可讀的解釋說明,用來代表命令是否成功等。XXX具備以下的規律:以2開頭的表示成功,以4和5開頭的表示失敗,以3開頭的表示未完成(進行中)。

命令

命令 描述
HELO 向服務器標識用戶身份
MAIL FROM: 爲發送者地址
RCPT TO: 用來標誌郵件接收者的地址,經常使用在MAIL FROM後,能夠有多個RCPT TO
DATA 將以後的數據做爲數據發送,以 . 標誌數據的結尾
REST 重置會話,當前傳輸被取消
NOOP 要求服務器返回OK應答,通常用做測試
QUIT 結束會話
VRFY 驗證指定的郵箱是否存在,因爲安全方面的緣由,服務器大多禁止此命令
EXPN 驗證給定的郵箱列表是否存在,因爲安全方面的緣由,服務器大多禁止此命令
HELP 查詢服務器支持什麼命令
AUTH LOGIN 認證請求
EHLO 除了HELO所具備的功能外,EHLO主要用來查詢服務器支持的擴充功能

編碼

250 8BITMIME /* 最後一個響應數字應答碼以後跟的是一個空格,而不是'-' */

用戶名、密碼需採用base64編碼(Base64就是一種基於64個可打印字符來表示二進制數據的表示方法。)

以「X」開頭的關鍵字都是指服務器自定義的擴充(還沒歸入RFC標準)

還有一些重要字段

Received: from DM6NAM11HT080.eop-nam11.prod.protection.outlook.com
 (2603:1096:201:20::24) by HK0PR06MB3714.apcprd06.prod.outlook.com with HTTPS
 via HK2PR02CA0212.APCPRD02.PROD.OUTLOOK.COM; Sat, 12 Oct 2019 02:04:31 +0000
Received: from DM6NAM11FT041.eop-nam11.prod.protection.outlook.com
 (10.13.172.57) by DM6NAM11HT080.eop-nam11.prod.protection.outlook.com
 (10.13.172.248) with Microsoft SMTP Server (version=TLS1_2,
 cipher=TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384) id 15.20.2347.16; Sat, 12 Oct
 2019 02:04:30 +0000
Authentication-Results: spf=pass (sender IP is 120.26.244.201)
 smtp.mailfrom=smail.kzedu.cc; hotmail.com; dkim=none (message not signed)
 header.d=none;hotmail.com; dmarc=bestguesspass action=none
 header.from=smail.kzedu.cc;
Received-SPF: Pass (protection.outlook.com: domain of smail.kzedu.cc
 designates 120.26.244.201 as permitted sender)
 receiver=protection.outlook.com; client-ip=120.26.244.201;
 helo=smtp552.submail.cn;
Received: from smtp552.submail.cn (120.26.244.201) by
 DM6NAM11FT041.mail.protection.outlook.com (10.13.172.98) with Microsoft SMTP
 Server id 15.20.2347.16 via Frontend Transport; Sat, 12 Oct 2019 02:04:29
 +0000
X-IncomingTopHeaderMarker:
 OriginalChecksum:24B3073D37E1488647AB6D33914E56311671421DA99AC9F3ACCE5038C61D9AED;UpperCasedChecksum:4E628F444082EA3506FF7B7B728D6469D42940820A842E95A6AF817CE7359561;SizeAsReceived:633;Count:10
Date: Sat, 12 Oct 2019 2:4:28 +0000

Received是smtp服務器記錄的從哪裏收到的郵件。從上往下就是SMTP中繼的各個節點。最下面的是發件服務器IP。

Received-SPF是防止假郵件的mail from能夠僞造from更不用說,可是SPF記錄該域名的郵件服務器的發件IP地址,能夠驗證真僞(要發假的垃圾郵件要模仿的是SMTP服務器行爲,除非黑客控制了一個域名的郵件服務器)。

MIME消息由消息頭和消息體兩大部分組成,郵件頭與郵件體之間以空行進行分隔

郵件頭包含了發件人、收件人、主題、時間、MIME版本、郵件內容的類型等重要信息。每條信息稱爲一個域,由域名後加「: 」和信息內容構成,能夠是一行,較長的也能夠佔用多行。域的首行必須「頂頭」寫,即左邊不能有空白字符(空格和製表符);續行則必須以空白字符打頭,且第一個空白字符不是信息自己固有的,解碼時要過濾掉。

郵件體包含郵件的內容,它的類型由郵件頭的「Content-Type」域指出。常見的簡單類型有text/plain(純文本)和text/html(超文本),multipart/mixed, multipart/related和multipart/alternative。

multipart類型,是MIME郵件的精髓。郵件體被分爲多個段,每一個段又包含段頭和段體兩部分,這兩部分之間也以空行分隔。常見的multipart類型有三種:multipart/mixed, multipart/related和multipart/alternative。

+------------------------- multipart/mixed ----------------------------+
|                                                                      |
|  +----------------- multipart/related ------------------+            |
|  |                                                      |            |
|  |  +----- multipart/alternative ------+  +----------+  |  +------+  |
|  |  |                                  |  | 內嵌資源 |  |  | 附件 |  |
|  |  |  +------------+  +------------+  |  +----------+  |  +------+  |
|  |  |  | 純文本正文 |  | 超文本正文 |  |                |            |
|  |  |  +------------+  +------------+  |  +----------+  |  +------+  |
|  |  |                                  |  | 內嵌資源 |  |  | 附件 |  |
|  |  +----------------------------------+  +----------+  |  +------+  |
|  |                                                      |            |
|  +------------------------------------------------------+            |
|                                                                      |
+----------------------------------------------------------------------+

能夠看出,若是在郵件中要添加附件,必須定義multipart/mixed段;若是存在內嵌資源,至少要定義multipart/related段;若是純文本與超文本共存,至少要定義multipart/alternative段。什麼是「至少」?舉個例子說,若是隻有純文本與超文本正文,那麼在郵件頭中將類型擴大化,定義爲multipart/related,甚至multipart/mixed,都是容許的。

multipart諸類型的共同特徵是,在段頭指定「boundary」參數字符串,段體內的每一個子段以此串定界。全部的子段都以「--」+boundary行開始,父段則以「--」+boundary+「--」行結束。段與段之間也以空行分隔。在郵件體是multipart類型的狀況下,郵件體的開始部分(第一個「--」+boundary行以前)能夠有一些附加的文本行,至關於註釋,解碼時應忽略。

能夠觀察一下邊界00一、00二、003等

提取pcapng中流量能夠從wireshark中直接將郵件正文部分複製出來保存到文件中後綴改成.eml拿客戶端打開。反正我以爲本身解析郵件中的文件太難了,取個巧。

base64

Base64的索引表,字符選用了"A-Z、a-z、0-九、+、/"
64個可打印字符。數值表明字符的索引,這個是標準Base64協議規定的,不能更改。64個字符用6個bit位就能夠所有表示,一個字節有8個bit位,剩下兩個bit就浪費掉了,這樣就不得不犧牲一部分空間了。這裏須要弄明白的就是一個Base64字符是8個bit,可是有效部分只有右邊的6個bit,左邊兩個永遠是0。

那麼怎麼用6個有效bit來表示傳統字符的8個bit呢?8和6的最小公倍數是24,也就是說3個傳統字節能夠由4個Base64字符來表示,保證有效位數是同樣的,這樣就多了1/3的字節數來彌補Base64只有6個有效bit的不足。

個人郵件當中有那麼一段

先用base64解碼,而後用GB2312解碼

須要注意的是根據RFC 822規定,每76個字符,還須要加上一個回車換行。因此字符串要手動去除回車換行。

參考:

https://zh.wikipedia.org/wiki/Base64

http://www.javashuo.com/article/p-rlivfogw-ep.html

https://blog.csdn.net/bripengandre/article/details/2192982

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息