协作办公
怀疑钓鱼邮件时如何解析邮件头追溯真实来源并验证发件人身份
收到可疑或举报的钓鱼邮件时,通过解析 Received 链、Return-Path、Message-ID 并验证 SPF/DKIM/DMARC 来追溯真实来源、确认或排除发件人伪造。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
怀疑钓鱼邮件时如何解析邮件头追溯真实来源通用
解决思路
- 从邮件客户端导出原始邮件头:Outlook 用 文件 > 属性 > Internet 标头;Gmail 用 三点菜单 > 显示原始邮件;Thunderbird 用 查看 > 邮件源码。若来自取证镜像,直接复制 EML 文件到案件目录。
- 若为 PST 文件,安装 pypff 并用 Python 脚本遍历文件夹提取每封邮件的 transport headers,按主题命名保存为 txt。
- 用 Python email 库(policy.default)解析 EML,打印关键字段:From、To、Subject、Date、Message-ID、Reply-To、Return-Path、X-Mailer、X-Originating-IP。
- 打印所有 Received 头并按 reversed() 逆序输出(自下而上即时间顺序),逐跳标注 Hop 编号,还原投递链路。
- 打印 Authentication-Results、ARC-Authentication-Results、Received-SPF、DKIM-Signature 等认证相关头,确认是否存在及结果。
- 用 dig TXT <发件域> +short | grep "v=spf1" 查 SPF 记录;用 dig TXT <selector>._domainkey.<发件域> +short 查 DKIM(selector 取自 DKIM-Signature 的 s= 字段);用 dig TXT _dmarc.<发件域> +short 查 DMARC 策略。
- 从第一个 Received 头提取发件 IP,用 pyspf 的 spf.check2(i=IP, s=发件地址, h=HELO 主机名) 手动验证 SPF,结果为 pass/fail/softfail/neutral/none/temperror/permerror。
- 用 AbuseIPDB API(curl 带 Key 头)或 VirusTotal 查询发件 IP 的信誉,判断是否在恶意 IP 列表中。
- 对发件域做 WHOIS(grep registrar/creation/expiration/registrant/nameserver),重点看注册时间——近期注册高度可疑;再用 dig 查 A、MX、NS 记录,用 dig -x 查发件 IP 的反向 DNS。
- 用 python-Levenshtein 计算发件域与合法域的编辑距离和相似度,ratio > 0.8 时警告疑似仿冒/域名抢注。
- 用 VirusTotal API(x-apikey 头)查询发件域信誉。
- 用 email.utils.parseaddr 比较 From 与 Reply-To 地址,不一致时输出警告(常见钓鱼特征)。
- 用 msg.get_body(preferencelist=('html','plain')) 取正文,正则提取所有 http(s) URL 去重列出。
- 用正则匹配 <a href=...>...</a>,比较显示文本中的 URL 与实际 href,不一致时标记为超链接伪装。
- 遍历 msg.walk() 提取附件,计算 SHA-256,保存到案件附件目录,并把哈希提交 VirusTotal、URL 提交 URLhaus/PhishTank 做信誉查询。
- 按固定格式输出分析报告:主题、From(标注是否伪造)、Reply-To、Return-Path、日期、逐跳投递路径、SPF/DKIM/DMARC 结果、钓鱼指标清单、风险等级(如 HIGH)。
适用边界 · 注意事项
- 邮件头已被截断或只拿到正文、没有完整原始头时,无法还原投递链和认证结果。
- 攻击者使用合法邮件营销服务发送钓鱼(SPF/DKIM 均通过)时,仅靠头部认证无法判定,必须转向 URL 与正文内容分析。
- 没有 DNS 查询工具或威胁情报 API 访问权限时,SPF/DKIM/DMARC 与 IP/域名信誉验证无法完成。