引擎完整性校验(engine-probe)
一个只做三件事的小工具:下载 → 算 SHA-256 → 比对后落盘。
它是「软件包外分发」架构里的完整性校验器,技术验证用途,也是日常排查下载链路问题的通用工具。
它保证什么
- 完整性:下载内容逐字节流式计算 SHA-256,与调用方提供的预期值比对;
- 安全默认:校验不过拒绝落盘(半份/被篡改的数据比没有数据更危险),exit=2 并打印实际摘要;
- 不执行:本工具只把字节写进文件,不会运行、解压或加载下载内容——执行交给调用方在校验通过后自行决定;
- 零依赖:纯 Python 标准库(urllib / hashlib / argparse),无网络框架、无二进制组件。
用法
python engine_probe.py --url <文件URL> --sha256 <64位十六进制预期值> --out <保存路径> [--timeout 60]
- 下载前先校验
--sha256参数格式(必须 64 位十六进制,防止拿错值导致假通过); - 流式分块读取(8 KiB),支持大文件,内存占用恒定;
- 自定义 User-Agent(默认
engine-probe/0.1),规避个别静态源对脚本默认 UA 的拦截。
退出码(判据,不靠输出措辞)
| exit | 含义 |
|---|---|
| 0 | 校验通过,文件已落盘 |
| 2 | 校验不过(摘要不一致)——未落盘 |
| 3 | 网络/URL 错误(超时、DNS、HTTP 非 200) |
| 4 | 参数错误(URL/sha256 格式非法、out 目录不可写) |
自检
python engine_probe.py --selftest
用内置固定样本验证:sha256 计算正确性、参数格式门、落盘判据三件事;自检不发起任何网络请求。
诚实边界
- 本工具不校验发布者身份(那是 RSA 验签层的职责,不在这个最小验证件里);
--timeout默认 60 秒,大文件请自行调大;- HTTPS 证书校验使用系统默认策略,不支持跳过证书校验(这是刻意的)。