📋 一分钟速览:四维检测 → 自动生成带证据的 PDF 报告全流程

本文核心是一套「采集 → 排版 → 固化 → 归档」四步自动报告流水线:① 用 curl 采集谷歌 / QQ微信 / 反诈 / APK 四维结果存成 JSON → ② 用 Python reportlab 免费生成带四维状态表和趋势图的 PDF → ③ 给 PDF 加生成时间戳和 SHA-256 哈希,实现防篡改证据固定 → ④ 挂到 cron 定时任务,每天自动生成并归档。核心结论:带哈希的 PDF 报告,申诉通过率比零散截图高一个量级,因为它能证明「在某年某月某日,你的域名在某个平台是干净的」。

⏱ 工具:curl + Python reportlab / fpdf2 + crontab | 覆盖四维:谷歌 Safe Browsing / QQ微信 urlsec / 防反诈 DNS / APK 文件哈希 | 零成本

为什么域名检测结果必须存成带时间戳和哈希的 PDF 报告,而不是手机截图?

很多站长养成了一个习惯:检测工具跑完,手机对着屏幕拍一张、发到群里就算「留档」了。这个习惯在申诉和追溯时几乎毫无用处。原因在于:截图只能证明「某个画面出现过」,但证明不了「这个画面属于你的域名、出现在哪个时间点、有没有被 PS 过」。

下面这张图对比了「手机截图」和「带哈希的 PDF 报告」在四个关键场景下的证据效力差异:

手机截图 vs 带哈希的 PDF 报告:四个场景下的证据效力对比 手机截图 无时间戳 · 易 PS · 无法校验 · 零散 带哈希 PDF 报告 有时间戳 · 防篡改 · 可校验 · 可归档 场景一 · 申诉谷歌 Safe Browsing 误标 截图:平台不认,无法证明时间 PDF:时间戳+哈希,证明「当日干净」 场景二 · 团队多人协作留档 截图:散落聊天记录,找不到 PDF:按日期归档,随时调出对比 场景三 · 事后追溯「何时开始被红」 截图:无历史,无法定位时间点 PDF:每日一份,锁定被红时间窗口 PDF 报告 = 证据级留档的三要素 ① 生成时间戳(精确到秒) ② SHA-256 内容哈希(防篡改) ③ 四维检测原始返回值(可复现) 三要素齐全,报告才有法律/平台采信价值 对比结论:截图是「印象」,PDF 报告才是「证据」

▲ 截图 vs 带哈希 PDF 报告的证据效力对比:申诉、协作、追溯三个场景下,PDF 报告全面胜出

换句话说:检测的目的不只是「知道现在红没红」,更是「在需要的时候能拿出证据」。一份带时间戳和哈希的 PDF 报告,就是你的「域名清白证明」。下面这张表把两种留档方式的差距量化说清楚:

留档方式 时间戳 防篡改 可检索归档 申诉采信度
手机截图 ❌ 无 ❌ 无法校验 ❌ 散落聊天
浏览器另存 HTML ⚠️ 文件修改时间可改 ❌ 无哈希 ⚠️ 需手动整理
带哈希 PDF 报告 ✅ 内嵌生成时间 ✅ SHA-256 校验 ✅ 按日期自动归档

四维检测数据怎么自动采集并整理成报告要用的 JSON?

生成 PDF 报告的第一步,是把谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒四个维度的检测结果,自动采集并落成一个结构化的 JSON 文件。有了这份 JSON,后面的排版、出图、归档全部可以自动化。下面三步带你搭好「数据采集」这层。

1

用 curl 采集四维检测结果

四维检测各有一个数据源:谷歌用 Safe Browsing API、QQ微信用腾讯 urlsec、反诈用四大运营商 DNS 解析、APK 用 Virustotal 文件哈希。下面这段 Shell 把四个维度一次性跑完,结果存成变量。

# 四维检测:一次跑完四个平台,结果存成变量 DOMAIN="example.com" # 1. 谷歌 Safe Browsing(返回空 = 未命中 = 安全) GSB=$(curl -s -X POST "https://safebrowsing.googleapis.com/v4/threatMatches:find?key=YOUR_KEY" \ -H "Content-Type: application/json" \ -d "{\"threatInfo\":{\"threatTypes\":[\"MALWARE\",\"SOCIAL_ENGINEERING\"],\"platformTypes\":[\"ANY_PLATFORM\"],\"threatEntryTypes\":[\"URL\"],\"threatEntries\":[{\"url\":\"http://$DOMAIN\"}]}}") # 2. QQ 微信 urlsec(返回 JSON,关注 result 字段) QQ=$(curl -s "https://cgi.urlsec.qq.com/index.php?m=url&a=valid&url=http://$DOMAIN") # 3. 反诈 DNS(四大运营商,被劫持会返回拦截页 IP) FZ=$(dig +short @114.114.114.114 $DOMAIN) # 4. APK 爆毒(域名级报告) VT=$(curl -s -H "x-apikey: YOUR_VT_KEY" \ "https://www.virustotal.com/api/v3/domains/$DOMAIN")
💡 Safe Browsing 的 API key 在 Google Cloud Console 免费申请,每天 1 万次额度;Virustotal 的 x-apikey 在 VT 官网账号里免费获取。
2

把四维结果打包成结构化 JSON

用 jq 或 Python 把上面的原始返回「翻译」成一份统一的检测结果 JSON,包含域名、时间戳、四个维度的状态和关键原始字段。这份 JSON 就是 PDF 报告的数据源。

# 用 Python 把四维结果写入 result.json import json, datetime, subprocess result = { "domain": "example.com", "timestamp": datetime.datetime.now().isoformat(), "dimensions": { "谷歌 Safe Browsing": "未命中(安全)", "QQ微信防红": "未拦截(安全)", "防反诈屏蔽": "正常解析", "APK爆毒": "0引擎检出(安全)" }, "raw": { "gsb": "", "qq": "", "dns": "", "vt": "" } } json.dump(result, open('result.json', 'w', encoding='utf-8'), ensure_ascii=False, indent=2) print('result.json 已生成')
💡 关键是把「原始返回」也一并存进 raw 字段——PDF 里附上原始 JSON,申诉时才有「可复现」的证据,而不是一句「我测过是绿的」。
3

(进阶)把四维检测封装成一个可复用函数

如果每天都要跑,建议把上面两步封装成一个 detect.sh 脚本,一条命令完成「采集 + 落 JSON」,后面接 cron 定时任务直接复用。

# detect.sh —— 一条命令采集四维结果并落 JSON # 用法:bash detect.sh example.com DOMAIN=$1 # … 上面四维采集逻辑 … python3 build_json.py "$DOMAIN"
💡 采集和排版分离的好处是:同一份 result.json,既能生成 PDF,也能生成 Markdown、HTML、告警推送——一次采集,多处复用。

用什么免费工具能生成带图表、带中文的 PDF 检测报告?

拿到 result.json 后,就是「排版出图」这一步。市面上一堆 PDF 生成库,但对中文检测报告来说,不是每个都能无痛输出中文——很多库默认字体不支持中文,会生成一堆乱码或方块。下面这张表帮你快速选型:

工具 语言 中文支持 图表能力 适合场景
reportlab Python ✅ 内置 STSong 等 CID 字体 ✅ 可画表格/折线/柱状 推荐首选,零依赖出图
fpdf2 Python ✅ 需注册 TTF 字体 ⚠️ 基础表格 轻量、单文件、无图表需求
weasyprint Python ✅ 走 HTML+CSS ✅ 可嵌入 SVG 图表 想用 HTML 模板控制版式
wkhtmltopdf CLI ✅ 走 HTML+CSS ✅ 可嵌入图表 已有 HTML 报告想直接转 PDF
matplotlib Python ⚠️ 需配置中文字体 ✅ 专业趋势图 单独生成趋势图,再拼进报告

综合来看,reportlab 是「免费 + 中文 + 图表」三者兼顾的最佳起点:它内置了 STSong(宋体)、STHeiti(黑体)等 CID 字体,无需额外下载字体文件,直接就能输出中文,还能画表格和简单图表。下面用 reportlab 把 result.json 变成一份 PDF:

1

安装 reportlab

# 一行安装 reportlab pip install reportlab
💡 reportlab 是纯 Python 库,无系统依赖,服务器、本地、Termux 都能装。
2

写一个把 result.json 排版成 PDF 的脚本

下面这段脚本读 result.json,生成一份包含「封面标题 + 四维状态表 + 时间戳」的 PDF 检测报告。中文直接用内置 STSong / STHeiti 字体。

from reportlab.lib.pagesizes import A4 from reportlab.lib.units import mm from reportlab.pdfgen import canvas from reportlab.pdfbase import pdfmetrics from reportlab.pdfbase.cidfonts import UnicodeCIDFont import json, datetime # 注册中文字体(reportlab 内置,无需下载字体文件) pdfmetrics.registerFont(UnicodeCIDFont('STSong-Light')) pdfmetrics.registerFont(UnicodeCIDFont('STHeiti-Light')) data = json.load(open('result.json', encoding='utf-8')) domain = data['domain'] ts = data['timestamp'] pdf = canvas.Canvas(f'{domain}-检测报告-{ts[:10]}.pdf', pagesize=A4) w, h = A4 # 封面标题 pdf.setFont('STHeiti-Light', 22) pdf.drawString(30*mm, h-40*mm, '域名安全四维检测报告') pdf.setFont('STSong-Light', 12) pdf.drawString(30*mm, h-52*mm, f'检测域名:{domain}') pdf.drawString(30*mm, h-60*mm, f'生成时间:{ts}') # 四维状态表 y = h - 78*mm pdf.setFont('STHeiti-Light', 14) pdf.drawString(30*mm, y, '四维检测结果') pdf.setFont('STSong-Light', 11) for dim, status in data['dimensions'].items(): y -= 9*mm pdf.drawString(30*mm, y, f'{dim}:{status}') pdf.save() print('PDF 检测报告已生成')
💡 四维状态建议用红/绿区分:reportlab 里用 setFillColor(colors.green) 给「安全」上绿色、colors.red 给「被红」上红色,一眼看清。

一份合格的检测报告,页面结构应该是下面这个样子——封面信息、四维状态、证据区三块缺一不可:

一份合格的 PDF 检测报告的页面结构 封面区 · 标题 + 域名 + 生成时间戳 标题 / 检测域名 / 精确到秒的时间戳 四维状态区 · 四个平台检测结果 谷歌 Safe Browsing / QQ微信 / 反诈 DNS / APK 文件哈希 每条结果用红/绿标注,附原始返回值 证据区 · SHA-256 哈希 + 结论 本报告内容哈希(防篡改)+ 检测结论一句话 三块齐全,报告才能被当作「证据」采信,而不是「一张好看的图」

▲ PDF 检测报告的页面结构:封面区 + 四维状态区 + 证据区,缺一不可

怎么给 PDF 报告加 SHA-256 哈希和时间戳,实现防篡改证据固定?

光生成 PDF 还不够——要让它成为「证据」,必须做到内容不可抵赖、时间不可伪造。这一步就是「证据固定」:给 PDF 算一个 SHA-256 哈希,把哈希值和时间戳一起写进一份 sidecar 证据清单。日后任何人想篡改报告,哈希对不上就会立刻暴露。

1

给 PDF 计算 SHA-256 哈希

PDF 生成后,立刻用 sha256sum 算出哈希值。这个哈希就是这份报告的「数字指纹」——内容改一个字节,哈希就完全变样。

# 对生成的 PDF 计算 SHA-256 哈希 sha256sum example.com-检测报告-2026-08-16.pdf # 输出示例: # 3f8a2b...c91d example.com-检测报告-2026-08-16.pdf
💡 把哈希值单独抄下来或写进 sidecar 文件,不要只靠文件名记忆——文件名可以被改,哈希值才是唯一标识。
2

生成带哈希和时间的证据清单(evidence.txt)

把「文件名 + 生成时间 + SHA-256 + 检测结论」写进一份 evidence.txt,和 PDF 一起存档。这份清单就是申诉时提交的「证据摘要」。

# 一键生成证据清单 evidence.txt F="example.com-检测报告-2026-08-16.pdf" { echo "文件:$F" echo "生成时间:$(date '+%Y-%m-%d %H:%M:%S')" echo "SHA-256:$(sha256sum $F | awk '{print $1}')" echo "结论:四维检测通过,域名未被谷歌/QQ微信/反诈/APK标记" } > evidence.txt cat evidence.txt
💡 时间戳建议用可信时间源(如 date -u 取 UTC,或接入 RFC 3161 可信时间戳服务),避免服务器本地时间被质疑。
3

(进阶)用 GPG 签名,让证据更硬

如果你需要更高的可信度,可以对 PDF 做 GPG 数字签名。签名后的文件带你的身份信息,第三方可以用你的公钥验证「这份报告确实是你生成、且未被篡改」。

# 用 GPG 对 PDF 做分离签名(生成 .sig 文件) gpg --armor --detach-sign example.com-检测报告-2026-08-16.pdf # 验证签名 gpg --verify example.com-检测报告-2026-08-16.pdf.asc
💡 GPG 签名比纯哈希多一层「身份」绑定:哈希只能证明「没被改」,签名还能证明「是我发的」。

⚠️ 最容易踩的一个坑:只存「结论」不存「原始数据」

很多人归档时只记一句「谷歌没红、QQ没拦截」,把原始的 API 返回 JSON 删了。结果申诉时平台要求「提供检测证据」,你只能干瞪眼。正确做法是:PDF 里附带四维检测的原始返回 JSON,或至少把 raw 字段一起打包存档——有原始数据,别人才可能复现并采信你的结论。

怎么把 PDF 报告接入 cron 定时任务,实现每天自动生成归档?

最后一步是「自动化」:把前面的采集、排版、固化串成一条流水线,交给 cron 每天定时跑。这样你的域名每天自动生成一份带哈希的检测报告并按日期归档,需要追溯「哪一天开始被红」时,翻归档目录就能精准定位。

1

把流水线串成一个 run.sh 脚本

一个脚本串起「采集 → 生成 PDF → 算哈希 → 归档」四步,输入一个域名即可。

# run.sh —— 一键生成当日检测报告并归档 # 用法:bash run.sh example.com DOMAIN=$1 DATE=$(date +%Y-%m-%d) mkdir -p reports/$DATE bash detect.sh "$DOMAIN" # 第1步:采集四维数据 → result.json python3 make_pdf.py # 第2步:result.json → PDF 报告 PDF=$(ls *.pdf | head -1) echo "$(sha256sum "$PDF")" >> reports/$DATE/evidence.txt # 第3步:哈希留证 mv "$PDF" result.json reports/$DATE/ # 第4步:按日期归档 echo "[$DATE] 检测报告已归档:reports/$DATE/"
💡 按日期建目录归档(reports/2026-08-16/),几个月后想回溯某一天的检测状态,直接进对应目录就能找到。
2

挂到 crontab,每天固定时间自动跑

用 crontab 设置定时任务。考虑到四大平台数据库刷新时间不同(谷歌约 2 小时、反诈约 4 小时、QQ微信约 6 小时),建议每天固定 2-3 个时间点各跑一次,覆盖平台的刷新窗口。

# crontab -e 添加下面几行,每天 9:00 / 15:00 / 21:00 自动生成检测报告 0 9 * * * cd /root/detect && bash run.sh example.com >> /var/log/report.log 2>&1 0 15 * * * cd /root/detect && bash run.sh example.com >> /var/log/report.log 2>&1 0 21 * * * cd /root/detect && bash run.sh example.com >> /var/log/report.log 2>&1
💡 一天多次检测还有个隐藏好处:能更精确地锁定「被红的时间窗口」,比一天一次更接近真实的封禁时间点。
3

接入告警,状态一变就推送到手机

归档之外,再加一层「状态变化告警」:脚本里比对今天和昨天的四维结果,一旦从绿变红,立刻推送到 Telegram 或企业微信。这样不用天天盯报告,出问题第一时间知道。

# 状态变化告警(run.sh 末尾追加) # 如果今天某维度与昨天不一致,推送告警 if [ "$TODAY_STATUS" != "$YESTERDAY_STATUS" ]; then curl -s "https://api.telegram.org/botYOUR_TOKEN/sendMessage" \ -d "chat_id=YOUR_CHAT" -d "text=⚠️ $DOMAIN 检测状态变化" fi
💡 告警 + 归档组合起来,就成了一套「自动检测 + 自动留证 + 自动通知」的完整域名安全监控闭环,全程零成本。
❌ 常见误区:「检测报告只是给自己看的,随便记一下就行」

检测报告真正的价值在「出事之后」——被误红要申诉、被合作方质疑要自证、被平台复核要举证,这时候一份带时间戳和哈希的 PDF 报告就是你的底气。现在随便记,等真需要证据的那天就晚了。正确做法是:从今天起就把自动报告流水线跑起来,让「留证」变成默认动作

✅ 推荐落地顺序(一次搭好,长期受益)

第 1 步:curl 采集四维数据 → result.json → 第 2 步:reportlab 生成带时间戳的 PDF → 第 3 步:sha256 哈希 + evidence.txt 证据固定 → 第 4 步:crontab 每天自动生成并按日期归档,状态变化推告警。
整套零成本,一次搭好之后每天自动运行,你只需要在出问题时打开归档目录取证据。

客户怎么说?

"我们的棋牌APP之前每天被封,接入Ai防红后连续运营90天零封禁。"

——某东南亚游戏运营商,月付1500U套餐

"谷歌防红提交后24小时解除Safe Browsing警告,比自己申诉快10倍。"

——某海外贸易平台,使用谷歌防红500U/月

"以前被误红只会截图到处发,申诉被驳回两次。后来用带哈希的PDF报告提交,附上时间戳和原始数据,一次就通过了。"

——某独立站长,用自动报告流水线完成证据固定后成功申诉

不想自己搭脚本?怎么用 333Check 免费拿到一份带证据的四维检测报告?

本文教你用免费工具把四维检测结果自动生成带哈希的 PDF 报告——你完全可以零成本自己跑起来。
如果你希望跳过搭建,直接拿到一份覆盖谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒四维、带时间戳和证据的报告,联系 @AICDN 免费测试。
我们帮你跑第一次全维度检测并出具可读报告,3 分钟出结果。

🔍 提交域名 · 免费获取四维检测报告