📋 一分钟速览:四维检测历史 → git 版本化归档 → diff 定位变化的完整路径

本文核心是一套「结果落盘 → git 自动提交 → diff 定位 → 告警日报」的检测历史管理流水线:① 把四维检测结果落成一份带时间戳的 JSON/文本文件 → ② 用 git 把检测历史目录初始化成仓库,每次检测后自动 git commit → ③ 用 git diff 对比任意两次检测,用 git log -S 精确定位「从绿变红」的那次提交 → ④ 把变化结果接进告警和日报。核心结论:检测的价值一半在「当下结果」,另一半在「历史趋势」——而 git 是免费、零依赖、人人会用的历史版本管理工具,正好补上后者

⏱ 工具:git(系统自带)+ 上一篇文章封装的四维检测脚本 | 覆盖四维:谷歌 Safe Browsing / QQ微信 urlsec / 反诈 DNS / APK 文件哈希 | 零成本

为什么域名四维检测历史不能只靠截图存档,而要用 git 做版本管理?

大多数站长检测域名被红的习惯是:测完顺手截个图,扔进相册或微信群。单看一次没问题,可一旦要回答下面这几个问题,截图就全抓瞎了:

  • 「这个域名是哪天开始被谷歌标记的?」——相册里几十张截图,得一张张翻时间戳。
  • 「上次检测还是全绿,这次哪一维变红了?」——截图之间没法自动对比,只能肉眼一张张对。
  • 「申诉的时候,怎么证明我的域名连续 90 天都是干净的?」——截图拼不出一条可信的时间线。

这三个问题的本质是同一个:你需要的是「可对比、可回溯、带时间线的检测历史」,而不是一堆孤立的快照。而 git 天生就是干这个的——它把每一次检测结果当作一个「版本」存下来,任何两次之间都能 diff 出差异,任何一次都能被 checkout 回去。下面这张图对比了「截图存档」和「git 版本管理」的差异:

截图存档 vs git 版本管理:检测历史管理方式对比 截图存档 ① 检测 → 截图 → 扔相册 ② 截图散落在手机/群聊里 ③ 无法自动对比两次结果 ④ 无法证明「连续N天干净」 快照是孤立的,拼不出时间线 git 版本管理 ① 检测 → 落 JSON → git commit ② 每次检测是一条提交记录 ③ git diff 自动对比任意两次 ④ git log 连成可信时间线 版本可对比、可回溯、可举证 结论:git 把「孤立快照」变成「连续历史」,diff 一键定位变化 免费、零依赖、系统自带,检测历史管理的最佳底座

▲ 截图存档 vs git 版本管理:可对比性、可回溯性、可举证性三个维度全面对比

换句话说:截图解决的是「当下这一刻长什么样」,git 解决的是「这一路是怎么变过来的」。做域名安全,后者往往更值钱——它告诉你封禁是从哪一刻开始的、是哪个维度先触发的,这些信息直接决定你申诉怎么写、防护往哪加。下面这张表把两者的能力差距量化说清楚:

能力维度 截图存档 git 版本管理
两次结果自动对比 ❌ 肉眼一张张对 ✅ git diff 一行命令
定位状态变化时间点 ❌ 手动翻时间戳 ✅ git log -S 精确到次
连续历史时间线 ❌ 碎片化 ✅ 每次提交一条记录
申诉举证 ❌ 难拼可信链条 ✅ 时间线 + 差异都可导出

怎么用 git 自动归档每次四维检测结果?

搭这套 git 检测历史仓库,只需要四步:① 让检测结果落成文件 → ② 初始化 git 仓库 → ③ 写自动提交脚本 → ④ 挂到 crontab 定时跑。检测脚本可以直接复用上一篇封装的 DetectClient 客户端,这里我们只关心「结果怎么进 git」。

整个归档流水线长这样:

四维检测 → git 自动归档流水线 ① 四维检测 detect_all() 谷歌/QQ/反诈/APK ② 落成 JSON result.json 带时间戳 ③ git commit 自动提交 带时间戳信息 ④ crontab 定时 每天定点跑 无人值守 git 仓库内部:每一次检测 = 一条 commit,连成时间线 commit 1 (08-17 全绿) → commit 2 (08-18 全绿) → commit 3 (08-18 谷歌变红) → … 任何两次之间 git diff,任何一次变化 git log -S 都能定位

▲ 四维检测 → 落盘 JSON → git 自动提交 → crontab 定时,四步搭好归档流水线

1

让检测结果落成一个带时间戳的 JSON 文件

检测脚本跑完后,把四维结果写进一个固定路径的 result.json。文件名固定不变,git 才能追踪它的「变化」;时间戳放内容里,别放文件名里(文件名一变,git 就当成删旧建新,diff 反而不直观)。

# run_detect.py —— 检测一个域名,四维结果落 result.json import json, datetime from detect_client import DetectClient # 复用上一篇的客户端 client = DetectClient(gsb_key="YOUR_GSB_KEY", vt_key="YOUR_VT_KEY") result = client.detect_all("example.com", apk_path="app.apk") result["timestamp"] = datetime.datetime.now().isoformat() # 时间戳放内容里 json.dump(result, open("result.json", "w", encoding="utf-8"), ensure_ascii=False, indent=2) print("result.json 已更新")
💡 文件名固定为 result.json 是关键——git 追踪的是「同一文件的版本变化」,文件名一变,diff 就变成「删一个文件、加一个文件」,定位变化的体验大打折扣。
2

初始化 git 仓库,做第一次基线提交

在检测结果目录里 git init,做一次基线提交。基线很重要——它是之后所有 diff 的「参照系」。

# 初始化检测历史仓库 cd ~/detect-history git init git add result.json git commit -m "baseline: 初始四维检测结果"
💡 建议在仓库里加一个 .gitignore,把检测脚本、APK 原文件等「不需要版本化的东西」排除掉,仓库里只留结果文件,历史更干净。
3

写自动提交脚本:检测完就 commit,信息带时间戳

把「检测 → 提交」串成一个脚本,每次跑完自动 commit,提交信息里带上时间戳和本次四维结果摘要,日后 git log 一眼能看出哪天、什么状态。

# archive.sh —— 检测 + 自动提交 cd ~/detect-history python3 run_detect.py # ① 落 result.json git add result.json # ② 暂存 TS=$(date '+%Y-%m-%d %H:%M:%S') git commit -m "detect @ $TS" -q # ③ 自动提交(-q 静默)
💡 提交信息里可以进一步带上状态摘要,比如 "detect @ $TS [谷歌:被红]",这样 git log --oneline 一屏就能看到历史状态演变,不用逐个 diff。
4

挂到 crontab,定时自动归档

archive.sh 交给 crontab 定时跑,检测历史就全自动积累。参考四大平台数据库刷新时间(谷歌约 2 小时、反诈约 4 小时、QQ微信约 6 小时),建议每天固定几个时间点跑。

# crontab -e 添加:每天 9:00 / 15:00 / 21:00 自动检测并归档 0 9 * * * bash ~/detect-history/archive.sh >> /var/log/detect.log 2>&1 0 15 * * * bash ~/detect-history/archive.sh >> /var/log/detect.log 2>&1 0 21 * * * bash ~/detect-history/archive.sh >> /var/log/detect.log 2>&1
💡 到这里,你的四维检测历史就开始了「自动驾驶」——每天自动检测、自动 commit,历史越长,git 的价值越大。

⚠️ 最容易踩的坑:结果文件里塞了随机字段,导致每次 diff 都是「全变」

如果你的 result.json 里带着每次都不一样的字段(比如当前时间戳、请求耗时、随机 request_id),那么每次 git diff 都会显示这些行变了,反而把真正的「状态变化」淹没在噪音里。正确做法是:把时间戳这类「每次必变」的字段单独放一个 key,diff 时用 --ignore-all-space 或直接 grep 状态字段,或者干脆把「纯状态」和「元信息」拆成两个文件,状态文件保持不变、元信息文件随意变。

检测结果从绿变红,怎么用 git diff 和 git log -S 一眼定位到具体时间点?

仓库搭好之后,最常用的三个动作就是:看历史时间线、对比两次结果、定位「哪次开始变红」。对应三条 git 命令,下面逐个说清用法。

先看整体历史时间线,一眼扫出最近几十次检测的状态演变:

# 看检测历史时间线(每次提交一行) git log --oneline -- result.json # 输出示例: # a3f9c2d detect @ 2026-08-18 21:00 [谷歌:被红] # b2e8d1b detect @ 2026-08-18 15:00 [全绿] # c1d7a0a detect @ 2026-08-18 09:00 [全绿] # d0c6f9f detect @ 2026-08-17 21:00 [全绿]

如果想知道「某两次之间到底变了什么」,用 git diff 对比两个提交:

# 对比最近一次和上一次检测的差异 git diff HEAD~1 HEAD -- result.json # 输出会以 +(新增)/ -(删除)的形式,标出哪些字段变了,比如: # - "谷歌域名防红": "安全", # + "谷歌域名防红": "被红", # - "防反诈屏蔽": "正常解析", # + "防反诈屏蔽": "被屏蔽(移动)",

而要回答「到底是哪一次检测开始变红的」这个最值钱的问题,用 git log -S——它会扫描历史,找出「某个字符串第一次出现或消失」的那次提交:

# 精确定位「谷歌域名防红」第一次变成「被红」的那次提交 git log -S '"谷歌域名防红": "被红"' --oneline -- result.json # 输出示例: # a3f9c2d detect @ 2026-08-18 21:00 [谷歌:被红] # 这就是你域名被谷歌标记的那一次检测,时间点精确到分钟

这三条命令的组合,效果可以这样理解:

git log -S 定位「从绿变红」时间点 08-17 09:00 08-17 21:00 08-18 09:00 08-18 15:00 ← 变红点 08-18 21:00 git log --oneline 扫一遍时间线 git log -S '被红' 直接命中变红那次提交 结论:一次 git log -S,把「哪天从绿变红」从「翻半天」变成「一秒定位」 时间点精确到分钟,申诉时直接作为证据引用

▲ git log -S 扫描历史,直接命中「谷歌域名防红」字段第一次从安全变被红的那次提交

✅ 三个命令各管一件事,背下来就够用

git log --oneline = 看时间线(历史长什么样);git diff A B = 看差异(两次之间变了几维);git log -S '关键词' = 定位变化点(哪天哪次开始变红)。日常排查顺序:先 log 扫一眼 → 圈出可疑区间 → diff 对比 → -S 精确定位。

git 管检测历史,和自己建数据库、写日志文件比,到底哪个更省事?

说到「管理历史」,很多人第一反应是「那我建个 SQLite 表、或者写个日志文件不就完了,干嘛用 git?」——三个方案确实都能存历史,但定位不同、各有胜场。下面这张表把三者摊开对比:

对比维度 git 版本管理 SQLite 数据库 纯日志文件
定位变化点 ✅ git log -S 秒级 需写 SQL 查询 需写脚本 grep
回溯任意历史版本 ✅ git checkout 一条命令 需额外快照机制 ❌ 基本没有
聚合统计(如近30天被红率) 较弱,需导出再算 ✅ SQL 一行搞定 ❌ 难
搭建成本 ✅ 零依赖,系统自带 需建表 + 写写入逻辑 ✅ 极低
申诉举证友好度 ✅ 时间线 + diff 直接导出 需导出整理 ❌ 难拼可信链条

一句话结论:git 赢在「版本化 + 回溯 + 定位变化」,SQLite 赢在「聚合统计 + 结构化查询」,日志文件最省事但功能最弱。对大多数站长来说,最实用的组合是——用 git 管版本化历史(本文这套),再按需把结果顺手写一份进 SQLite 做统计,两者并不冲突,一个管「时间线」,一个管「报表」。

❌ 常见误区:「git 是程序员写代码用的,管检测结果太大材小用了」

git 确实是程序员工具,但它的能力——版本化、diff、时间线、可回溯——恰恰是域名检测历史最需要的。而且它零成本、零依赖、系统自带,几条命令就能跑起来。真正「大材小用」的反而是花大价钱买一套检测 SaaS,结果历史只能看最近 30 天。用 git 自建历史,等于用免费工具拿到了 SaaS 级的时间线能力。

git 历史怎么接进告警和日报,让被红时间点自动推送到手?

光有历史还不够,最后一步是把 git 的能力「接进你的日常」:变化自动告警 + 每天自动日报。这样「从绿变红」发生的那一刻,不是等你下次想起来才翻 git,而是自动推到你面前。

1

用 git diff 的结果驱动告警:状态一变就推送

归档脚本里,在 commit 之前先跑一次 diff,如果检测到关键字段变化(安全→被红),立刻推送告警,再提交归档。这样「告警」和「归档」在同一次检测里一起完成。

# archive.sh 里加一段:状态变化就告警 python3 run_detect.py CHANGE=$(git diff -- result.json | grep "被红\|被拦截\|被屏蔽" | head -1) if [ -n "$CHANGE" ]; then curl -s "https://api.telegram.org/botYOUR_TOKEN/sendMessage" \ --data-urlencode "chat_id=YOUR_CHAT" \ --data-urlencode "text=⚠️ 域名状态变化: $CHANGE" fi git add result.json git commit -m "detect @ $(date '+%Y-%m-%d %H:%M:%S')" -q
💡 这里的 git diff 是「提交前」的暂存区对比,正好能捕获「本次检测相对上次」的变化,用它驱动告警最合适。
2

用 git log 生成每日检测日报

每天跑一个日报脚本,用 git log --since 拉出今天的检测记录,拼成日报推送到群,团队不用登录服务器就能掌握全部域名状态。

# daily_report.sh —— 生成并推送今日检测日报 TODAY=$(date '+%Y-%m-%d') REPORT=$(git log --since="$TODAY 00:00" --oneline -- result.json) curl -s "https://api.telegram.org/botYOUR_TOKEN/sendMessage" \ --data-urlencode "chat_id=YOUR_CHAT" \ --data-urlencode "text=📊 今日检测日报\n$REPORT"
💡 日报里可以再拼上「今日有无变红」「当前四维状态」,用 git log -S 的结果做总结,团队看一眼就清楚。
✅ 完整闭环:检测 → 归档 → diff 告警 → 日报

第 1 步:四维检测落 result.json第 2 步:git 自动 commit 归档 → 第 3 步:diff 变化触发告警 → 第 4 步:每日 git log 生成日报。
整套免费、零依赖,一次搭好后每天自动运行——你拥有了一条可追溯、可回滚、可举证、自动告警的域名检测历史,这是花钱买 SaaS 也未必给全的能力。

客户怎么说?

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

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

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

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

"以前几十个域名被红,翻截图根本说不清哪天开始的。后来用 git 归档每次四维检测结果,git log -S 一秒定位到变红那天的具体时间点,申诉时直接把时间线截图提交上去,一次就过。"

——某批量域名运营者,用 git 检测历史归档后申诉通过率明显提升

不想自己搭 git 归档流程?怎么用 333Check 免费拿到带时间戳的检测历史?

本文教你用 git 零成本自建四维检测历史——完全可以自己搞定。
如果你希望跳过搭仓库、写脚本,直接拿到覆盖谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒四维、带时间戳的检测结果与历史记录,联系 @AICDN 免费测试。
检测到域名被红?联系 @AICDN 免费测试,3 分钟出结果。

🔍 提交域名 · 免费获取四维检测结果