本文主要使用Wireshark对邮件客户端使用POP3协议收取邮件的过程进行抓包分析并使用telnet命令进行简单操作。
1、POP3简介
邮局协议(英语:Post Office Protocol,缩写:POP)属于TCP/IP协议族中的一员,由RFC 1939定义。此协议主要用于支持使用客户端远程管理在服务器上的电子邮件。最新版本为POP3,全名“Post Office Protocol - Version 3”,而提供了SSL加密的POP3协议被称为POP3S。
POP支持离线邮件处理。其具体过程是:发件人将邮件发送到服务器上,收件人客户端使用MUA以连接服务器,并下载所有未阅读的电子邮件。这种离线访问模式是一种存储转发服务,将邮件从邮件服务器端送到个人客户端上,可以是PC或者手机等多种设备。旧版的POP3协议在邮件被下载后,会删除掉邮件服务器上的邮件。改进的POP3协议可以在配置中选择可以“只下载邮件,服务器端并不删除”,也是目前POP3的主流操作方式。
2、抓包环境
抓包工具还是使用的wireshark,测试的协议是POP3,默认端口110,同样地为了方便分析数据没有使用TLS/SSL加密,但是结果都问题不大。
测试的账号登录之后自动同步了收件箱中已有的5封邮件,然后我又给测试账号发了一封邮件,因此抓包的时候MUA客户端上应该是只有本地已缓存的5封已读邮件和服务器端尚未下载的1封未读邮件,这样比较符合实际的情况。
开启wireshark监听对应的网卡,设定Filter为邮件服务器的IP并且设定协议为pop基本就能抓取到需要的数据包,然后我们再Follow这条POP数据流对应的TCP stream就可以看到下面的完整信息。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1cvPTpsd-1645781182981)(https://resource.tinychen.com/image-20200511131942318.png)]
毫无意外地可以看到TCP的三握四挥,这里不作赘述。
3、POP3数据包分析
首先我们可以看到在客户端和服务端TCP三次握手建立连接后,服务端发送报文给客户端告知顺利和POP3服务器建立连接:
接下来客户端发送了一个CAPA命令:
wiki里面有列出常用的POP3命令,但是却并没有CAPA这条命令,顺着下面的参考文档查了一下,在RFC的文档RFC2449中找到了比较详细的定义:
Section 3 describes the CAPA response using [ABNF]. When a
capability response describes an optional command, the
SHOULD be identical to the command keyword. CAPA response tags are
case-insensitive. CAPA
Arguments:
none Restrictions:
none Discussion:
An -ERR response indicates the capability command is not
implemented and the client will have to probe for
capabilities as before. An +OK response is followed by a list of capabilities, one
per line. Each capability name MAY be followed by a single
space and a space-separated list of parameters. Each
capability line is limited to 512 octets (including the
CRLF). The capability list is terminated by a line
containing a termination octet (".") and a CRLF pair. Possible Responses:
+OK -ERR
也就是说客户端发送CAPA命令主要是用于获取POP3服务端可以执行的命令,然后POP3服务器果然就返回了对应的+OK response
和Capability list follows
接下来客户端开始传输账号密码用于登录,可以看到在登录成功之后,POP3服务端返回了消息提示有6封邮件(6 mess