邮件那些事3—解析邮件Received数量问题与识别发件人IP

本文介绍了邮件头中的Received字段及其在邮件传输过程中的作用,通过分析四种发送接收方式(网页发网页、网页发客户端、客户端发网页、客户端发客户端),揭示了Received字段数量与邮件来源真实性的关联,指出多个Received字段或发件人可疑可能意味着邮件被伪造。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

通过前两节的内容,读者是否对邮件的整个传输结构有了一定的了解呢,那么接下来我们学习邮件头的解析,邮件头会根据不同的邮件服务器产生不同的结构,但大致一定会有的,也是我们重点关注的结构有两个:

一个是邮件的发送和接收者描述部分

一个是邮件系统添加的部分也就是Received部分

比如使用163免费邮箱的张三(zhangsan)想要给李四(lisi)发送一个邮件,那么会经过如下步骤:

首先张三调用客户端或者网页发送邮件,有网页或者客户端添加如下字段:

Date: Wed, 21 Oct 2015 14:19:00 +0800 (CST)

From: =?GBK?B?1cW729TG?= <zhangsan@163.com>

To: lisi@qq.com

Subject: =?GBK?B?zfjSs7eizfjSsw==?=

X-Priority: 3

X-Mailer: Coremail Webmail Server VersionSP_ntes V3.5 build(通常是网页发送的)

有张三的邮件服务器接受张三的邮件,添加Received字段,意思是从张三处接收到了邮件

### 定位和查看钓鱼邮件发件人地址 当客户端遭受病毒攻击后,为了定位并查看钓鱼邮件发件人地址,可以通过电子邮件头信息来进行分析。电子邮件头部包含了丰富的元数据,能够揭示邮件的真实来源和其他重要细节。 #### 使用电子邮件头部信息 大多数现代电子邮件客户端允许用户查看完整的邮件头部信息。这其中包括了`Return-Path`, `Received`字段以及其他有助于识别邮件路径的信息。特别是`Received`字段通常记录了邮件传递过程中的每一个节点,从最初的发送服务器到最后接收方之间的所有中间环节[^1]。 对于具体的操作步骤: 在Outlook中: 1. 打开可疑邮件; 2. 点击“文件”选项卡下的“属性”,这里可以看到详细的邮件头信息; 在Gmail里: 1. 打开一封邮件; 2. 点击右上角三个垂直点按钮; 3. 选择“显示原始消息”。 解析这些头部信息可以帮助确认实际发出此封邮件的SMTP服务器以及可能存在的任何异常情况,比如不匹配的域名或IP地址等特征,这些都是判断是否存在潜在风险的关键线索。 另外值得注意的是,某些高级别的社会工程学攻击可能会试图掩盖真实的发件身份,因此除了依赖技术手段外还需要结合其他上下文因素综合考量,例如联系通信对方验证其真实性等等[^2]。 ```python import email from email import policy from email.parser import BytesParser def parse_email_headers(email_file_path): with open(email_file_path, &#39;rb&#39;) as f: msg = BytesParser(policy=policy.default).parse(f) headers = {} for header in [&#39;From&#39;, &#39;To&#39;, &#39;Subject&#39;, &#39;Date&#39;]: value = msg.get(header) if value is not None: decoded_value = str(value.encode(&#39;utf8&#39;), encoding=&#39;ascii&#39;) headers[header.lower()] = decoded_value received_fields = [] for part in reversed(msg._payload): # 反序遍历以获得最早的收到时间戳 if isinstance(part, list): continue payload = part.get_payload(decode=True) if b&#39;received&#39; in (part.get_content_type().lower()).encode(): parsed_received = email.header.make_header( email.header.decode_header(str(payload)) ) received_fields.append(parsed_received) return {**headers, "received": received_fields} ``` 上述Python代码片段展示了如何读取本地保存的一个.eml格式的电子邮件文件,并提取其中重要的头部信息,包括但不限于发件人(`From`)、收件人(`To`)、主题(`Subject`)及日期(`Date`),同时也特别关注了所有的`Received`字段以便更好地理解邮件传输链路。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值