ajd3000/dmarc-analyzer
GitHub: ajd3000/dmarc-analyzer
一个本地DMARC聚合报告分析工具,用于快速识别邮件认证失败的高风险记录。
Stars: 0 | Forks: 0
# DMARC 聚合扫描器
一个**仅限本地**的小工具:上传 DMARC **聚合**报告(包含 `.xml` / `.xml.gz` 文件的 ZIP 压缩包,或原始 XML),查看高价值记录行(处置策略不是 `none`,DKIM 和 SPF 双重失败,可选的仅 DKIM / SPF 对齐噪音)。**除了通过浏览器可选下载的 JSON 文件外,不会向磁盘写入任何内容。**
## 系统要求
- **Python 3.11+**
- Windows、macOS 或 Linux
## 运行 (开发模式)
在此目录 (`dmarc-analyzer/`) 下:
```
python -m pip install -r requirements.txt
python -m dmarc_analyzer
```
在 **Windows** 上,如果 `python` 命令缺失或打开了 Microsoft Store 的安装引导程序,请改用 **Python 启动器**(命令相同,只需更换前缀):
```
py -3 -m pip install -r requirements.txt
py -3 -m dmarc_analyzer
```
在浏览器中打开 **http://127.0.0.1:8765**。
选项:
```
python -m dmarc_analyzer --port 9000
python -m dmarc_analyzer --host 127.0.0.1 --port 8765
```
Windows (`py -3`):
```
py -3 -m dmarc_analyzer --port 9000
py -3 -m dmarc_analyzer --host 127.0.0.1 --port 8765
```
请**勿**在不受信任的网络上暴露 `--host 0.0.0.0`;上传内容可能包含敏感信息。
### 可编辑安装 (可选)
```
python -m pip install -e .
dmarc-analyzer --port 8765
```
Windows (`py -3`):
```
py -3 -m pip install -e .
py -3 -m dmarc_analyzer --port 8765
```
## 限制 (压缩包炸弹 / 巨大邮件流)
可在 `dmarc_analyzer/parse.py` 和 `dmarc_analyzer/server.py` 中配置:
| 限制项 | 默认值 |
|--------|---------|
| 单文件最大上传大小 | 25 MiB |
| 单个压缩文件成员解压后 XML 最大大小 | 50 MiB |
| 单个 XML 最大解析记录数 | 20,000 |
| 单次请求中所有上传文件的最大总行数 | 100,000 |
| 返回给浏览器 JSON 的最大行数 | 15,000 |
如果达到上限,请拆分上传文件或在本地提高相关常量值。
## PyInstaller (可选 “单文件夹” 应用)
PyInstaller **不支持**交叉编译:需要在每个目标操作系统上构建。
1. 安装依赖项 + PyInstaller:`python -m pip install -r requirements.txt pyinstaller` (Windows: `py -3 -m pip install -r requirements.txt pyinstaller`)
2. 在 `dmarc-analyzer/` 目录下:
```
pyinstaller --name dmarc-analyzer ^
--onedir ^
--add-data "static;static" ^
--collect-all uvicorn ^
dmarc_analyzer/server.py
```
在 macOS/Linux 上使用 `--add-data "static:static"`。
3. 运行生成的可执行文件;它默认仍然绑定到 **127.0.0.1**。
**注意:** `uvicorn.run("dmarc_analyzer.server:app", ...)` 需要 `dmarc_analyzer` 包在 `PYTHONPATH` 中。对于 PyInstaller,推荐使用一个小型的**启动入口脚本**,该脚本从 `dmarc_analyzer.server` 导入 `app` 并调用 `uvicorn.run(app, ...)`,这样可以更干净地将您的包包含在打包文件中。如果控制台显示导入错误,请调整隐藏导入设置。
## 它的功能 / 不支持的功能
- **支持:** 聚合报告 (ZIP / `.xml.gz` / `.xml`),符合 RFC 的 `` XML。
- **不支持:** 取证失败报告 (`message/rfc822` 附件),没有保存状态的历史 “新 IP” 基线。
## 界面行为
- 所有行都在服务器端**标记**了原因代码。
- 复选框用于筛选表格中显示的原因;勾选**“显示所有行”**将禁用原因过滤。
- **下载 JSON** 会将最后一次 API 响应(保存在页面内存中)保存为文件。
### IP 组织 (RDAP) 列
- 可选复选框 **解析 IP 组织 (RDAP)** (默认:开启)。当您只关心认证列时,取消勾选可以加快运行速度。
- **IP 组织**列是基于 **RDAP**(注册数据)通过 **`ipwhois`** 构建的,其理念类似于 WHOIS 中的 “组织 + 网络句柄” 信息行 —— **不是**实时的 `nslookup` PTR 记录。
- 需要运行应用的机器具备**出站互联网**连接(用于查询 RIR / RDAP 服务)。
- 每个请求中按 `source_ip` 进行**去重**。最多查询 **300** 个唯一的**公共** IP;额外的唯一 IP 将显示 **`(RDAP 查询上限)`**。大型报告在首次分析时可能需要**几分钟**时间。RDAP 注册机构有时会对突发请求进行**速率限制**;应用采用**分块并行批次**(而不是一个单一的大 `as_completed` 超时,那样会导致运行中途中止)、**针对每个 IP 的重试**,以及对第一次批处理后仍返回 **“-”** 的 IP 进行**第二次顺序查询**的策略。
标签:DKIM验证, DMARC分析, DNS枚举, SPF验证, XML解析, ZIP文件处理, 上传工具, 反钓鱼, 域名报告分析, 域名认证, 报告扫描, 数据解析, 本地应用程序, 浏览器界面, 电子邮件安全, 网络安全工具, 逆向工具, 邮件防欺骗, 高信号行识别