POP3协议分析

2023-11-04

感谢原作者:http://blog.csdn.net/bripengandre/article/details/2192111

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结束_________________|

ddddddd
  

 

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

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

POP3协议分析 的相关文章

  • JavaMail 使用POP3/SMTP服务发送QQ邮件

    目录 一 说明二 理解三 实现1 导入jar包2 用户认证3 发送邮件创建步骤简单的Email带HTML的E mail带图片的Email包含附件的邮件 一 说明 邮件服务器 为用户提供接收邮件的功能 xff0c 有发邮件的SMTP服务器 x
  • SOAP传输协议

    一 HTTP传输协议 超文本传输协议 xff08 HyperText Transfer Protocol xff0c 缩写 xff1a HTTP xff09 xff0c 它是基于请求 响应的模式协议 xff0c 客户端发出请求 xff0c
  • 如何在 Ubuntu 上安装和配置 Dovecot

    Dovecot 是一款开源 IMAP 和 POP3 电子邮件服务器 因其可靠性 可扩展性和易用性而被广泛使用 POP3 邮局协议 3 和 IMAP 互联网消息访问协议 都是用作消息访问代理的协议 这些协议用于从邮件服务器上的用户收件箱中获取
  • H.323协议分析

    感谢原作者 http blog csdn net bripengandre article details 2230087 整理记录 版本 时间 内容 整理人 V1 0 2008 03 28 H 323协议分析初稿 彭令鹏 H 323协议分
  • POP3协议分析

    感谢原作者 http blog csdn net bripengandre article details 2192111 POP3协议分析 第1章 POP3概述 POP3全称为Post Office Protocol version3 即
  • 【MQTT】

    系列文章目录 MQTT 搭建 在云服务器上搭建MQTT服务 失败了也挺可爱 成功了就超帅 文章目录 前言 1 EMQX简介 2 EMQX部署 3 EMQX一些操作指令 3 1 启动EMQX 3 2 停止EMQX 3 3 检查EMQX运行状态
  • SPI总线协议概述

    一 概述 SPI serial peripheral interface 是一种同步串行通信协议 由一个主设备和一个或多个从设备组成 主设备启动与从设备的同步通信 从而完成数据的交换 SPI是一种高速全双工同步通信总线 标准的SPI仅仅使用
  • 使用 OAuth2.0 的客户端凭据流程进行 IMAP 身份验证失败 |爪哇 |在线交流

    我正面临着一个验证失败尝试使用客户端凭据授予流程连接两个 IMAP 协议时出现问题OAuth2 0 在哪里 我一直遵循微软在其分步指南中建议的步骤 即 使用 OAuth 验证 IMAP POP 或 SMTP 连接 我一直在使用这个githu
  • Javamail 和 Gmail Pop3 SSL

    我正在尝试将我的应用程序连接到 Gmail 以检查电子邮件 我必须对 POP3 使用 SSL 这是我的代码 Properties props new Properties props put mail host pop gmail com
  • 通过 POP3 自动检查退回的电子邮件? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 谁能推荐可以检查退回邮件以及退回原因的软件或 NET 库 我收到退回的电子邮件到我可以阅读的 pop3 帐户 我需要它来保持我的用户数据库中不含无效
  • 用 PHP 实现的 IMAP 或 POP3 服务器

    PHP 中是否有可用的 POP3 IMAP 服务器实现 我正在使用以下方式处理我的电子邮件服务sendgrid 我将使用 files db whatever 将邮件存储在我的服务器上 现在我想为我的用户提供对其邮箱的完整 POP3 或 IM
  • 使用Python解析Gmail并将所有早于日期的内容标记为“已读”

    长话短说 我创建了一个新的 Gmail 帐户 并将其他几个帐户链接到它 每个帐户都有 1000 条消息 我正在导入这些帐户 所有导入的消息均以未读状态到达 但我需要它们显示为已读 我对 python 有一点经验 但我只使用 mail 和 i
  • 保存电子邮件附件(python3、pop3_ssl、gmail)

    我正在尝试保存来自 Google 邮件帐户的电子邮件附件 AFAIK 它可以 遍历 消息并获取其有效负载 for part in message walk getting payload saving attach etc 但它不起作用 请
  • 如何以编程方式 (C#) 从 POP3 邮件中获取附件?

    是否有任何 C API 可以完成此任务 有什么建议么 我用过 n 软件 http www nsoftware com ipworks 过去取得了成功 不是免费的 但是嘿 如果它不起作用 你就可以责怪别人 换句话说 你得到公司的技术支持 他们
  • 如何从 C# 代码重新启用 Gmail 中的弹出功能?

    我有一个从 Gmail 下载邮件的程序 我选择了单选按钮 为所有邮件启用 POP 甚至是已下载的邮件 下载邮件后 我的 Gmail 将上述状态更改为 对自当前日期以来到达的所有邮件启用 POP 我没有物理更改单选按钮 但它似乎自动将其设置为
  • 使用 php 从 POP3 服务器获取邮件

    我正在尝试从 POP3 获取邮件 我正在使用 POP3 邮件服务器 并且我正在尝试获取邮件内容并将其存储到我的项目的数据库表中 但我找不到任何 PHP 脚本 全部仅适用于 IMAP 您知道如何从 POP3 服务器获取邮件吗 Thanks 有
  • 如何通过代理通过 POP 或 IMAP 获取电子邮件?

    poplib 或 imaplib 似乎都不提供代理支持 尽管我尝试了 google fu 但我找不到太多有关它的信息 我正在使用 python 从各种支持 imap pop 的服务器获取电子邮件 并且需要能够通过代理来完成此操作 理想情况下
  • 以编程方式配置 Outlook 邮件设置?

    想知道是否有一种简单的方法可以通过编程方式向 Outlook 的邮件服务器设置添加和配置 POP3 服务器 搜索 Google 似乎得到的结果告诉我 我必须对存储在 HKCU Software Microsoft Windows NT Wi
  • 如何在我的邮件服务器中创建(或注册)新的 pop3 电子邮件帐户

    我正在创建一个 Android 应用程序 该应用程序将具有 API 来创建新的 pop3 电子邮件帐户 我正在使用 roundcube 网络邮件客户端创建新的电子邮件帐户 手动 但我需要以编程方式创建新帐户 我在网上搜索过 但我没有收到任何
  • 如何在 C# 中保存电子邮件附件 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如何使用 C 从我的邮件 例如 gm

随机推荐

  • 周末用Python兼职赚了5000,分享一些接单技巧

    大家最近过得开心吗 元旦假日将至 Python副业圈子里的朋友们一定很开心 每年年末都是Python技术变现旺季 尤其是在目前这种大厂都缺人的特殊时期 私活订单多到接不完 很多人都在接单 近两年开辟副业兼职赚钱的人越来越多 我们似乎进入了一
  • vscode统计代码行数,前端开发配置、快捷键使用

    1 统计代码行数 使用场景是项目年终统计行数 实现 在需要统计得文件夹右键 在文件夹中查找 后输入筛选得正则表达式 b b 注意右边小图标都点亮 这里顺便将自己使用vscode进行前端开发环境配置归纳一下 便于自己以后快速搭建 vscode
  • 稳健回归(Robustness regression)

    稳健回归 Robustness regression 标签 空格分隔 监督学习 author duanxxnj 163 com time 2016 07 08 稳健回归Robustness regression 最小二乘法的弊端 稳健回归
  • PHP 垃圾回收机制(GC)

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 GC回收机制是什么 二 引用技术的知识 三 GC垃圾回收机制的使用 四 CISCN 2022 初赛 ezpentest 五 NSSCTF prize p1 前
  • Java-基于SSM的人事管理系统

    项目背景 在高速发展的时代 众多的软件被开发出来 给用户带来了很大的选择余地 而且人们越来越追求更个性的需求 在这种时代背景下 人们对人事管理系统越来越重视 更好的实现人事管理系统的有效发挥 本文将通过人事管理系统的信息 分析在日常生活中对
  • linux搭建测试环境

    微信设置水滴昵称 个性中带点萌 Linux搭建测试环境安装软件详细步骤 一 安装jdk1 8 二 jdk与tomact对应版本 三 安装tomact 四 安装mysql mysql 5 7 24 linux glibc2 12 x86 64
  • 高考+考研,如何选择人工智能相关专业?

    世界杯如火如荼 高考报志愿 确定考研目标也在火热展开中 人工智能行业如此热门 那么目前都哪有 科班 专业可供选择呢 结合相关资料 整理出与AI紧密相关的国内高校与科研院所名单 希望能帮到小伙伴们 成为朝阳产业 人工智能是研究 开发用于模拟
  • 删除文件名含有特殊字符的文件

    删除文件名含有特殊字符的文件 当你要删除含有特殊字符的文件名时 有以下几种情况 使用转义字符 引号 rm rf rm rf rm rf 上述命令删除文件名为 的文件 如果直接删除 那么根目录中的所有文件都会丢失 这种方式能够适用于大多数情况
  • jenkins war包 centos启动安装指导

    文章目录 问题回顾 1 进入官网 下载到Jenkins的war包 1 1 放置在指定位置 1 2 放置安装包和创建文件放置路径 1 3 检查环境 1 4 配置启动命令和结束命令 2 启动后进入到Jenkins页面 2 1 安装插件 例如流水
  • (一)Springboot原理源码解析之Springboot框架组成

    目录 一 总体框架构成 1 注解组成关系 2 类继承和调用关系 二 框架总体调用流程 1 入口类中的流程 2 Spring刷新流程 一 总体框架构成 我在分析Springboot的组成部分把其分成了两部分 注解组成及关系 主要说明了在启动过
  • LeetCode.81 搜索旋转排序数组Java

    LeetCode 81 搜索旋转排序数组 注意 通过mid和左边数字大小可以判断到底是左边有序还是右边有序 需要处理重复数字最后才能通过 代码 class Solution public boolean search int nums in
  • 信奥赛一本通 C++题解 2034【例5.1】反序输出

    2034 例5 1 反序输出 时间限制 1000 ms 内存限制 65536 KB 提交数 23315 通过数 9932 题目描述 输入n 个数 要求程序按输入时的逆序把这n个数打印出来 已知整数不超过100个 也就是说 按输入相反顺序打印
  • Element-ui表单验证验证失败,input内有内容仍然验证为空的问题,验证数值类型不一致问题

    首先展示正确的格式 以验证是否为空为例 html代码块
  • QProcess 类使用总结

    背景 QProcess 类用于启动外部程序并与它们通信 QProcess 将进程视为I O 设备 可以对进程进行写入和读取 调用参数设置 同时指定路径和参数调用程序 QProcess process new QProcess this pr
  • 阿里云轻量级服务器安装--宝塔面板

    一 环境 1 服务器 阿里云轻量级服务器 2 环境 CentOS 7 6 二 安装 1 打开远程链接 2 输入安装命令 yum install y wget wget O install sh http download bt cn ins
  • js加密字符串

    字符串加密 用javascript对字符串进行加密 应用于参数传递等 默认加密密钥为kb1234 使用者可自定义修改 注意加密密钥应和解密密钥相同 算法来自于互联网 使用方法 加密 var code kbt encrypt 我爱北京天安门
  • 大算力时代已经到来

    计算机发展到现在 早已经历了大数据时代 而现如今国家也注意到国民大数据的重要性 而给予保护性条款和制度的建立 我觉得这只是早已注定的结局 但是未来该走向何方 着眼当下 我们互联网人早已身处在答案之中 大算力 Big Computing Po
  • 清除windows登录密码

    清除windows登录密码 原理 替换登录界面中的工具 登录界面中的轻松使用中的工具一般有放大镜 c Windows System32 Magnify exe 屏幕键盘 讲述人等 可以使用下列方法之一完成 命令行下的操作 替换后重启系统 点
  • 为什么打两拍可以消除亚稳态的影响?

    为什么打两拍可以消除亚稳态的影响 首先 我们需要了解什么是亚稳态 看下图 简单来说 就是当时钟信号上升沿到来的时候正好采样的数据也在发生变化 但是对于采样的时钟信号 如果想要采样得到一个稳定值 在clk的上升沿的前一段时间有一个建立时间TS
  • POP3协议分析

    感谢原作者 http blog csdn net bripengandre article details 2192111 POP3协议分析 第1章 POP3概述 POP3全称为Post Office Protocol version3 即