⏱️ 自动巡检引擎 定时触发 → 四维检测 → 结果比对 状态变化? → 立即报警 🔍 谷歌域名防红 Safe Browsing API 📱 QQ微信防红 内置浏览器检测 🛡️ 防反诈屏蔽 三运营商DNS检测 📦 APK爆毒 多引擎复扫 📧 邮件报警 检测报告PDF附件 💬 微信/Telegram通知 即时推送+卡片摘要 📊 控制面板 实时Dashboard

▲ 图1:四维自动巡检报警系统架构——定时引擎同时触发四个维度的检测,结果有变化时自动推送至三通道报警

手动检测域名安全为什么已经彻底不够用了?

如果你还在「想起来就检测一下、想不起来就算了」的状态,你的域名正处于巨大的风险敞口中。让我们看一组真实数据:

手动检测 vs 自动巡检:关键差距

根据333Check对200+个域名的运营数据分析:

• 拦截发生时间分布:38%的拦截发生在凌晨0:00-6:00(你睡觉时)、25%发生在周末(你休息时)、仅37%发生在工作日的9:00-18:00。

• 从拦截到发现的平均延迟:手动检测用户从域名被拦截到发现拦截,平均延迟 11.3小时(部分案例甚至超过48小时);自动巡检用户从拦截发生到收到报警通知,平均延迟 4.7分钟

• 因延迟发现造成的损失:以日均1000UV的域名计算,11.3小时的拦截窗口意味着 约470个用户 看到红色警告页面后永远流失。

谷歌域名防红的Safe Browsing状态更新是准实时的——谷歌爬虫可能在凌晨3点重新扫描你的域名并标记为危险,而你在早上9点才发现。这6个小时里,所有Chrome用户都看到红色警告页。QQ微信防红的灰度发布更是完全不可预测——腾讯可能在周五晚上对某个机房推送新的拦截策略,你的域名突然在某个地区开始被微信拦截,而你周一早上才发现,一个完整的周末流量全部浪费。防反诈屏蔽由各省运营商自行决策,执行时间没有任何规律。APK爆毒的手机管家病毒库更新同样不受你控制——今天下午4点你的APK还正常,5点华为推送了新病毒库,你的APK立刻被标记。

⚠️ 手动检测的核心问题不是「慢」,而是「不可靠」

人不可能真正执行7×24的检测。就算你设了闹钟每4小时检测一次,你也会错过凌晨2点的谷歌更新、周五晚上的微信灰度、以及随时可能发生的运营商劫持。域名安全监控的唯一正确答案是「自动化」——让机器替你盯着,让机器在状态变化的第一时间通知你。这才是真正的7×24。

四维自动巡检系统到底怎么从零开始搭建?(完整4步实操教程)

以下是面向零基础用户的完整搭建教程。你不需要任何编程经验——每一步都有截图说明和复制粘贴即可运行的配置代码。

1

第一步:注册并配置四个维度的检测API

自动巡检的核心是程序化调用各平台的检测接口。以下是四个维度的免费/低成本API方案:

谷歌Safe Browsing API:访问 Google Cloud Console → 创建项目 → 启用「Safe Browsing API (v4)」→ 创建API密钥。免费配额:每天最多10,000次查询。API端点:safebrowsing.googleapis.com/v4/threatMatches:find,传入域名即可返回「CLEAN」或「SOCIAL_ENGINEERING/MALWARE/UNWANTED_SOFTWARE」。

QQ微信检测:微信/QQ没有官方公开API,需要使用「模拟内置浏览器访问+页面内容分析」的方案。具体做法:用 Headless Chrome(Puppeteer/Playwright)设置微信/QQ的User-Agent字符串,访问目标域名,检测返回页面中是否包含微信拦截页面的特征关键词(如「已停止访问该网页」「据用户投诉及腾讯安全策略」等)。

防反诈DNS劫持检测:使用 itdog.cn 的HTTP检测API(通过抓包获取其内部接口)或自建dig命令脚本——对目标域名在三运营商DNS上分别执行dig查询,比对各返回IP。如果某个运营商返回127.0.0.1或运营商拦截页面IP,即为被劫持。

APK爆毒检测:使用 VirusTotal Public API v3。免费配额:每天500次查询、每分钟4次。上传APK或提交APK的SHA-256哈希值即可获取65+引擎的扫描结果。

💡 省时技巧:不想逐个注册?333Check的免费检测工具已内置这四个维度的统一API,一次调用即可返回全部四个维度的检测结果,无需单独申请各平台API密钥。

2

第二步:用Python编写自动巡检脚本(可复制粘贴)

以下是巡检脚本的核心逻辑框架。将四个维度的检测函数整合到一个定时执行的脚本中:

#!/usr/bin/env python3 """域名四维自动巡检脚本 — 每N分钟执行一次""" import requests import json import time import hashlib from datetime import datetime # ===== 配置区 ===== DOMAIN = "yourdomain.com" # 替换为你的域名 SAFE_BROWSING_API_KEY = "YOUR_GOOGLE_API_KEY" # 谷歌API密钥 VT_API_KEY = "YOUR_VIRUSTOTAL_API_KEY" # VirusTotal API密钥 WEBHOOK_URL = "YOUR_WEBHOOK_URL" # 报警通知webhook CHECK_INTERVAL = 300 # 巡检间隔(秒),建议300秒=5分钟 # ===== 状态存储 ===== LAST_STATE = {} # 上一次检测结果 def check_google_safe_browsing(domain): """谷歌Safe Browsing检测""" url = "https://safebrowsing.googleapis.com/v4/threatMatches:find" params = {"key": SAFE_BROWSING_API_KEY} body = { "client": {"clientId": "auto-patrol", "clientVersion": "1.0"}, "threatInfo": { "threatTypes": ["SOCIAL_ENGINEERING","MALWARE","UNWANTED_SOFTWARE"], "platformTypes": ["ANY_PLATFORM"], "threatEntryTypes": ["URL"], "threatEntries": [{"url": f"https://{domain}"}] } } resp = requests.post(url, params=params, json=body, timeout=30) data = resp.json() if "matches" in data and len(data["matches"]) > 0: threats = [m["threatType"] for m in data["matches"]] return {"status": "BLOCKED", "threats": threats} return {"status": "CLEAN"} def check_all_dimensions(domain): """执行四维检测,返回统一结果""" results = { "timestamp": datetime.now().isoformat(), "domain": domain, "google": check_google_safe_browsing(domain), # "wechat": check_wechat(domain), # 微信/QQ检测 = Playwright模拟 # "antifraud": check_antifraud(domain), # 反诈检测 = dig多运营商 # "apk": check_virustotal(apk_hash), # APK爆毒 = VT API } return results def compare_and_alert(new_state, old_state): """对比新旧状态,如有变化立即报警""" changes = [] for dim in ["google","wechat","antifraud","apk"]: if new_state.get(dim) != old_state.get(dim): changes.append(f"{dim}: {old_state.get(dim)} ➔ {new_state.get(dim)}") if changes: alert_msg = f"🚨 {domain} 安全状态变化!\n" + "\n".join(changes) requests.post(WEBHOOK_URL, json={"content": alert_msg}, timeout=10) return True return False # ===== 主循环 ===== while True: try: result = check_all_dimensions(DOMAIN) compare_and_alert(result, LAST_STATE) LAST_STATE = result print(f"[{datetime.now()}] 巡检完成 → Google:{result['google']['status']}") except Exception as e: print(f"[{datetime.now()}] 巡检异常: {e}") time.sleep(CHECK_INTERVAL)

💡 以上代码为骨架框架。微信检测、反诈检测、APK检测的具体实现因工具差异而不同——完整版可直接使用333Check的统一API,一个请求返回四个维度全部结果。

3

第三步:配置定时任务让脚本7×24持续运行

最简单可靠的方式是使用Linux的crontab(服务器)或GitHub Actions(免服务器免费方案):

方案A — 服务器crontab(推荐,最稳定)

# 编辑crontab: crontab -e # 每5分钟执行一次四维巡检 */5 * * * * /usr/bin/python3 /opt/patrol/auto_check.py >> /var/log/patrol.log 2>&1 # 每小时生成一次巡检汇总报告 0 * * * * /usr/bin/python3 /opt/patrol/daily_report.py

方案B — GitHub Actions(免费,无需服务器):在仓库 .github/workflows/patrol.yml 中设置每5分钟触发一次的workflow。用 cron: '*/5 * * * *' 即可。GitHub Actions每月提供2000分钟免费额度,5分钟间隔的巡检每月消耗约8640分钟——但可以通过合并多个域名的检测到一次运行中来节省额度。

方案C — 云函数(按量付费,最省钱:阿里云函数计算FC / AWS Lambda,用定时触发器每5分钟触发一次。按调用次数和运行时长计费,每月费用通常不到1元。

💡 三个方案的可靠性排序:服务器crontab > 云函数 > GitHub Actions。生产环境强烈建议用服务器crontab,因为GitHub Actions的定时触发有±15分钟的不确定性延迟。

4

第四步:设置三通道报警通知(微信+邮件+Telegram)

只巡检不报警等于白检。以下是最实用的三通道报警方案:

通道一:企业微信机器人(最推荐)——在企业微信群中添加群机器人,获取Webhook URL。巡检脚本检测到状态变化时,POST一条Markdown格式的消息到该webhook,手机微信立刻收到通知。支持@所有人功能,紧急拦截可以触发全群提醒。

通道二:邮件报警(最正式)——使用SMTP发送带HTML格式的检测报告邮件。推荐使用QQ邮箱SMTP(smtp.qq.com:587),免费且到达率高。邮件正文中附带四维检测结果的对比表格 + 变化高亮。

通道三:Telegram Bot(最快)——创建Telegram Bot(@BotFather),获取Bot Token和Chat ID。使用Telegram Bot API发送消息,送达速度通常<1秒。支持内联按钮——用户可以在消息中直接点击「查看详情」「忽略此报警」「立即处理」等按钮。

💬
企业微信机器人
Webhook推送 · 支持@所有人 · 免费
📧
邮件报警
SMTP发送 · HTML报告 · 免费
🤖
Telegram Bot
API推送 · 内联按钮 · 免费
巡检引擎 每5分钟触发 状态比对 新结果 vs 上次结果 有变化? 无变化 → 记录日志 🚨 crontab定时器 */5 * * * * ▲ 图2:自动巡检决策流程——定时触发→四维检测→状态比对→有变化则报警

▲ 图2:自动巡检决策流程——从定时触发到报警通知的完整数据流

不同的巡检频率方案到底怎么选?谷歌/微信/反诈/APK分别需要多快的响应?

并非所有维度都需要相同频率的检测。根据各平台的实际拦截响应速度,推荐以下差异化巡检频率:

检测维度推荐巡检频率原因报警响应窗口检测方式
谷歌域名防红每5分钟GP商店触发后Google 30分钟内同步到全球CDN5-30分钟Safe Browsing API v4
QQ微信防红每10分钟腾讯灰度发布通常持续1-72小时,10分钟足以捕获新策略10-60分钟UA模拟+内容分析
防反诈屏蔽每30分钟运营商DNS劫持执行速度慢,通常以小时为单位生效30分钟-2小时多运营商dig+HTTP探测
APK爆毒每4小时VirusTotal缓存+手机管家病毒库更新频率低4-24小时VT API + 国内引擎复扫

💡 频率设置的核心原则:宁可多检,不可漏检

以上频率是「最低推荐值」。如果你的域名日UV超过5000,建议全部维度升级到每5分钟一次。额外的API调用成本(谷歌每天10,000次免费配额足够每5分钟跑288次)可以忽略不计,但漏掉一次拦截的代价可能是几百上千个用户的流失。从ROI角度,每5分钟巡检一次是绝对划算的。

谷歌Safe Browsing
每5分钟
最高优先级
QQ微信防红
每10分钟
高优先级
防反诈屏蔽
每30分钟
中优先级
APK爆毒
每4小时
常规优先级

收到自动报警后怎么快速判断是误报还是真实拦截?(5分钟应急诊断流程)

自动巡检系统的最终价值不在「发现变化」,而在「帮你快速决策」。以下是收到报警后的5分钟应急诊断流程:

应急诊断流程(收到报警 → 5分钟内完成判断)

第1分钟——打开报警消息,查看是哪个维度的状态变化。如果报警内容显示「谷歌 CLEAN → BLOCKED」,立即打开Transparency Report做中央DB查询确认。

第2分钟——如果报警来自微信维度,立即用你自己的微信打开域名,确认是否真的出现拦截页面。如果出现拦截页,截图保存证据。

第3分钟——如果报警来自反诈维度,打开itdog.cn做一次全国Ping,确认拦截范围和影响省份。

第4分钟——判断是不是缓存波动导致的瞬态报警(一个周期报红、下一个周期恢复绿)。如果是单次瞬态报警,标记为「观测中」;如果是连续两个周期持续报红,标记为「确认拦截」。

第5分钟——确认拦截后,立即启动处置流程:谷歌拦截→Search Console申诉;微信拦截→微信公众平台申诉;运营商劫持→联系ISP解除;APK报毒→换签名重新提交。

💡 核心原则:两次连续报警 = 确认拦截。单次瞬态报警先观察两个周期再决策,避免因网络抖动触发误处置。

⚠️ 自动巡检最常见的三类误报警(及如何过滤)

1. API超时误报:谷歌Safe Browsing API偶尔返回超时(尤其是免费配额用户),脚本将超时误报为状态变化。解决方案:在脚本中加入重试逻辑(3次重试,间隔5秒),只有三次全部超时才报警。2. DNS波动误报:运营商DNS偶尔返回异常IP(非拦截,只是临时解析异常)。解决方案:对比连续两个周期的结果,单次DNS异常不报警。3. VirusTotal缓存不一致:VT的缓存更新有延迟,可能出现「上次绿、这次报毒1/65、下次又绿」的波动。解决方案:设置阈值——只有3个以上主流引擎报毒时才触发APK维度的报警。

有没有「零代码」的一键自动巡检方案?免费和付费工具到底怎么选?

如果你不想自己写Python脚本、配crontab、调API,以下是市场上可用的「零代码」域名安全巡检方案对比:

工具/服务覆盖维度巡检频率报警通道价格适合场景
333Check免费检测谷歌+微信+反诈+APK全四维手动触发(一次检测)邮件报告免费轻量需求 · 偶尔检测
333Check自动巡检谷歌+微信+反诈+APK全四维自动 · 5分钟/次微信+邮件+Telegram三通道90U/月商业运营 · 7×24监控
UptimeRobot + 自定义脚本仅HTTP可达性(非安全检测)5分钟/次邮件+Slack+Webhook免费(50个监控)仅监控域名是否在线
自建方案(本文教程)四维(需自行集成各API)自定义需自行开发免费(API免费额度内)有技术团队 · 自主可控
Semonto / Site24x7HTTPS证书+HTTP状态1-60分钟邮件+SMS+Slack$9-35/月通用网站监控(非域名安全)

选型建议:什么时候该自建,什么时候该用现成工具?

自建方案适合:有技术团队、需要高度定制(如自定义报警规则、对接内部IM系统)、域名数量超过20个(自建的边际成本为零)。现成工具适合:无技术人员、域名数量在1-5个、需要「开箱即用」的报警功能。333Check自动巡检的自建等价成本估算:自建需要1-2天开发 + 每月约$15的服务器成本 + 持续的API配额管理和维护。如果你的时薪超过$30/小时,用现成方案更划算。