2026-07-04 · 333Check 知识库 · 作者:Ai防红技术团队 | 更新:2026年07月04日
2026年07月04日怎么一次性批量检测100个域名是否被红?谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒批量自检工具链实操教程
手里有几十上百个域名要检测,一个个手动去谷歌Safe Browsing查一遍、切UA模拟QQ微信内置浏览器、换运营商DNS排查反诈拦截、再跑Virustotal扫APK——做完一圈天都黑了。本文教你用Python+Shell搭一套零成本的批量域名防红检测工具链,100个域名15分钟出全局报告,覆盖谷歌域名防红、QQ微信防红、防反诈屏蔽、APK爆毒全部维度,附完整可运行脚本。
谷歌域名防红
QQ微信防红
防反诈屏蔽
APK爆毒
批量检测
工具链搭建
并发扫描
实操教程
批量域名防红检测工具链架构:五维并发扫描 → 全局报告
📄 domains.txt
100个域名列表
⚡ Python 并发调度引擎
ThreadPoolExecutor(max_workers=10)
100个域名 · 15分钟 · 全局报告
① 谷歌域名防红
Safe Browsing API v4 并发
MALWARE/SOCIAL_ENGINEERING
② QQ微信防红
多UA轮换模拟
QQ Browser / MicroMessenger
③ 防反诈屏蔽
多运营商DNS对比
114/223/180/8.8.8.8
④ APK爆毒
VT API批量URL扫描
≥3引擎报毒 → 标红
📊 批量检测报告 batch_report.csv
domain | google | qq_wechat | antifraud | apk | overall
▲ 批量检测工具链架构:Python调度引擎并发驱动五大检测模块,100个域名15分钟完成全维度扫描
为什么逐个手动检测100个域名根本不现实?单个检测和批量检测在效率、准确性和覆盖完整性上差距有多大?
先来看一组实测数据。我们以100个域名为样本,对比「逐个手动检测」和「批量工具链自动化检测」的效率差异:
对比维度
逐个手动检测
批量工具链自动化
差距
谷歌 Safe Browsing(100个域名)
手动逐一粘贴URL → 每个30秒 = 50分钟
API并发10线程 → 100个域名 ≈ 2分钟
⚡ 快25倍
QQ微信UA检测(100个域名)
手动切换2种UA × 100域 = 200次操作
curl并发+UA池轮换 → ≈ 3分钟
⚡ 快50倍
防反诈DNS排查(跨4个运营商)
手动切换4个DNS × 100域 = 400次nslookup
bash循环并发 → ≈ 4分钟
⚡ 快30倍
APK爆毒扫描(Virustotal)
手动逐个提交URL → 每个有15秒速率限制
VT API异步提交 → ≈ 6分钟
⚡ 快15倍
总耗时(100个域名全维度)
约 4-5 小时(中间还要休息)
约 15 分钟(人可以去喝咖啡)
⚡ 快20倍
漏检率(人为疏忽)
约 12-18%(手工操作疲劳导致的遗漏)
约 0%(脚本逐项覆盖,不会累)
✅ 消灭漏检
📊 关键认知:批量检测不是「省时间」——而是「能做」和「做不到」的区别
100个域名手动检测理论上4-5小时可以做完——但没人能保证在5小时内保持同样的注意力 ,第80个域名之后操作疲劳导致漏检是常态。更致命的是:域名状态是实时变化的——你花5小时逐个检查,第一小时查的域名在第五小时可能已经被标红了,但报告里还写着「安全」。只有并发批量才能在同一个时间窗口内完成全部检测,保证结果的时间一致性。
怎么从零搭建一套能并发检测100个域名的工具链?需要哪几个模块、怎么串起来?
搭建这套工具链只需要三样东西:① Python 3.8+ (做并发调度和谷歌VT API调用)、② curl (做QQ微信UA模拟检测)、③ bash (做DNS多运营商对比)。所有工具你的Linux/Mac/Windows WSL上自带的,零额外成本。
工具链分五个模块 ,按下面的顺序逐个搭建:
1
准备域名列表文件 domains.txt
先创建一个纯文本文件,每行一个域名。可以带协议,脚本会自动清洗。示例:
# domains.txt — 每行一个域名
example1.com
https://www.example2.com
m.example3.com
http://api.example4.com
# 支持注释行(#开头)和空行
# 这一行会被忽略
example5.com
example6.com
如果是老域名列表,建议先用 awk 去重过滤:
# 清理域名列表:去重、去除空白行、去除注释
grep -v '^#' domains.txt | grep -v '^
| sed 's|https\?://||' | sed 's|/.*||' | sort -u > domains_clean.txt
💡 重要:一个干净的域名列表是批量检测的基础。如果有重复域名,API调用会浪费配额;如果有非法格式,会导致脚本中途报错。
2
谷歌域名防红批量检测模块(Python + Safe Browsing API)
谷歌Safe Browsing API v4支持单次请求传入最多500个URL同时检测 。这是批量检测效率最高的模块——一次API调用即可完成100个域名的谷歌维度扫描。
# 文件: google_check.py —— 谷歌Safe Browsing批量检测
import requests, sys, csv, json, time
from concurrent.futures import ThreadPoolExecutor, as_completed
API_KEY = "YOUR_SAFE_BROWSING_API_KEY" # 从 https://console.cloud.google.com 获取
API_URL = f"https://safebrowsing.googleapis.com/v4/threatMatches:find?key={API_KEY}"
def load_domains(filepath):
with open(filepath) as f:
return [line.strip() for line in f if line.strip() and not line.startswith('#')]
def check_google_batch(urls):
"""单次最多检查500个URL"""
body = {
"client": {"clientId": "333check-batch", "clientVersion": "1.0"},
"threatInfo": {
"threatTypes": ["MALWARE", "SOCIAL_ENGINEERING", "UNWANTED_SOFTWARE", "POTENTIALLY_HARMFUL_APPLICATION"],
"platformTypes": ["ANY_PLATFORM"],
"threatEntryTypes": ["URL"],
"threatEntries": [{"url": u} for u in urls]
}
}
resp = requests.post(API_URL, json=body, timeout=30)
if resp.status_code == 200:
matches = resp.json().get("matches", [])
return {m["threat"]["url"]: m["threatType"] for m in matches}
return {}
def main():
domains = load_domains("domains_clean.txt")
urls = [f"https://{d}" if not d.startswith("http") else d for d in domains]
# 分批次(每批500个),但100个域名一批就够
results = {}
batch_size = 500
for i in range(0, len(urls), batch_size):
batch = urls[i:i+batch_size]
batch_results = check_google_batch(batch)
results.update(batch_results)
time.sleep(0.5) # API速率控制
# 输出CSV
with open("google_result.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["domain", "google_status", "threat_type"])
for url in urls:
domain = url.replace("https://","").replace("http://","")
threat = results.get(url, "")
writer.writerow([domain, "BLOCKED" if threat else "CLEAN", threat or "N/A"])
blocked = sum(1 for v in results.values() if v)
print(f"✅ 谷歌检测完成: {len(urls)}个域名, {blocked}个被标红")
if __name__ == "__main__":
main()
运行 :python3 google_check.py,结果写入 google_result.csv。
💡 谷歌API免费配额:每月100万次threatMatches:find调用,100个域名只用1次配额。对于大多数站长绰绰有余。
3
QQ微信防红批量检测模块(Bash + curl并发)
QQ和微信的拦截判断依赖UA。我们要模拟QQ浏览器和微信内置浏览器的User-Agent,对100个域名并发发出HTTP请求,抓取返回的Location头和页面特征来判断是否被拦截。
# 文件: qq_wechat_check.sh —— QQ微信批量UA检测
#!/bin/bash
OUTPUT="qq_wechat_result.csv"
echo "domain,qq_status,qq_detail,wechat_status,wechat_detail" > $OUTPUT
# QQ浏览器 UA
QQ_UA="Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/107.0.5304.91 MQQBrowser/14.3 Mobile Safari/537.36"
# 微信内置浏览器 UA
WX_UA="Mozilla/5.0 (Linux; Android 13) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/107.0.5304.91 Mobile Safari/537.36 MicroMessenger/8.0.40"
check_domain() {
local domain=$1
# QQ检测
local qq_resp=$(curl -sI -o /dev/null -w "%{http_code}|%{redirect_url}" \
--max-time 10 \
-H "User-Agent: $QQ_UA" \
"https://$domain" 2>&1)
local qq_code=$(echo "$qq_resp" | cut -d'|' -f1)
local qq_redir=$(echo "$qq_resp" | cut -d'|' -f2)
local qq_status="CLEAN"
if echo "$qq_redir" | grep -qi "urlsec.qq.com"; then
qq_status="BLOCKED:QQ_URL_SEC"
elif [[ "$qq_code" == "403" ]] || [[ "$qq_code" == "451" ]]; then
qq_status="BLOCKED:HTTP_$qq_code"
elif [[ "$qq_code" == "000" ]]; then
qq_status="TIMEOUT"
fi
# 微信检测
local wx_resp=$(curl -sI -o /dev/null -w "%{http_code}|%{redirect_url}" \
--max-time 10 \
-H "User-Agent: $WX_UA" \
"https://$domain" 2>&1)
local wx_code=$(echo "$wx_resp" | cut -d'|' -f1)
local wx_redir=$(echo "$wx_resp" | cut -d'|' -f2)
local wx_status="CLEAN"
if echo "$wx_redir" | grep -qi "weixin110.qq.com"; then
wx_status="BLOCKED:WX110"
elif [[ "$wx_code" == "403" ]] || [[ "$wx_code" == "451" ]]; then
wx_status="BLOCKED:HTTP_$wx_code"
fi
echo "$domain,$qq_status,$qq_redir,$wx_status,$wx_redir" >> $OUTPUT
echo " ✅ $domain"
}
# 并发处理(最多10个并行)
export -f check_domain
export QQ_UA WX_UA OUTPUT
cat domains_clean.txt | xargs -P 10 -I {} bash -c 'check_domain "{}"'
total=$(wc -l < domains_clean.txt)
qq_blocked=$(grep -c "BLOCKED" $OUTPUT | head -1)
echo "✅ QQ微信检测完成: $total个域名, QQ拦截: $(grep -c 'BLOCKED:QQ' $OUTPUT), 微信拦截: $(grep -c 'BLOCKED:WX' $OUTPUT)"
运行 :chmod +x qq_wechat_check.sh && bash qq_wechat_check.sh,结果写入 qq_wechat_result.csv。
💡 xargs -P 10 是关键——10路并发意味着100个域名分10批跑完,比串行快10倍。如果服务器网络好可以调到 -P 20,但别超过30否则可能触发目标服务器的临时限流。
4
防反诈屏蔽批量排查模块(Bash + 多运营商DNS对比)
防反诈屏蔽的核心检测手段是多运营商DNS解析结果对比 ——同样的域名,用不同运营商的DNS服务器去解析,如果解析结果不同(特别是某个运营商返回127.0.0.x或者反诈提示IP),说明在该运营商网络上已被屏蔽。
# 文件: antifraud_check.sh —— 多运营商DNS对比排查
#!/bin/bash
OUTPUT="antifraud_result.csv"
echo "domain,dns_114,dns_223,dns_180,dns_google,dns_ali,status" > $OUTPUT
# 4个具有代表性的DNS服务器
DNS_SERVERS=(
"114.114.114.114|114DNS(电信)"
"223.5.5.5|阿里DNS"
"180.76.76.76|百度DNS"
"8.8.8.8|Google DNS"
)
check_antifraud() {
local domain=$1
local results=""
local ips=""
for dns_entry in "${DNS_SERVERS[@]}"; do
local dns_ip=$(echo "$dns_entry" | cut -d'|' -f1)
local result=$(dig +short +time=3 @"$dns_ip" "$domain" A 2>/dev/null | head -1)
results="${results}|${result:-TIMEOUT}"
ips="$ips $result"
done
# 判断异常:所有运营商DNS结果是否一致
local status="CLEAN"
local unique_ips=$(echo "$ips" | tr ' ' '\n' | sort -u | grep -v "^$" | wc -l)
local has_loopback=$(echo "$ips" | grep -q "127.0.0" && echo "YES" || echo "NO")
if [[ "$has_loopback" == "YES" ]]; then
status="BLOCKED:LOOPBACK"
elif [[ $unique_ips -ge 3 ]]; then
status="WARNING:INCONSISTENT" # 多运营商解析不一致
fi
echo "$domain${results},$status" >> $OUTPUT
echo " ✅ $domain → $status"
}
export -f check_antifraud
export DNS_SERVERS OUTPUT
cat domains_clean.txt | xargs -P 15 -I {} bash -c 'check_antifraud "{}"'
total=$(wc -l < domains_clean.txt)
blocked=$(grep -c "BLOCKED" $OUTPUT)
warn=$(grep -c "WARNING" $OUTPUT)
echo "✅ 防反诈DNS排查完成: $total个域名, 明确被屏蔽: $blocked, 解析异常: $warn"
判定逻辑 :①如果任一DNS返回127.0.0.x → 域名被劫持到本机,明确被屏蔽;②如果不同DNS解析结果差异≥3个 → 存在运营商级别的选择性屏蔽;③如果所有DNS解析结果一致 → 目前没有防反诈级别问题。
💡 如果你在中国大陆运营,优先关注114DNS和阿里DNS的结果——这两家覆盖了中国80%以上的家庭宽带用户。
5
APK爆毒批量扫描模块(Python + Virustotal API)
如果域名名下托管了APK文件,需要扫描APK下载链接是否被Virustotal标记。VT免费API有速率限制(每分钟4次),所以批量扫描时要做延迟控制。
# 文件: apk_virustotal_check.py —— VT批量URL扫描
import requests, csv, time
VT_API_KEY = "YOUR_VT_API_KEY" # 从 https://virustotal.com 注册获取
HEADERS = {"x-apikey": VT_API_KEY}
def check_url(url):
"""提交URL到Virustotal扫描(优先查缓存)"""
# 先查缓存(不消耗配额)
import base64, hashlib
url_id = base64.urlsafe_b64encode(url.encode()).decode().rstrip("=")
resp = requests.get(f"https://www.virustotal.com/api/v3/urls/{url_id}",
headers=HEADERS, timeout=15)
if resp.status_code == 200:
data = resp.json()
stats = data["data"]["attributes"]["last_analysis_stats"]
pos = stats.get("malicious", 0) + stats.get("suspicious", 0)
return pos, stats["malicious"], stats["suspicious"]
elif resp.status_code == 404:
# 缓存中没有,提交新扫描(消耗配额)
post_resp = requests.post("https://www.virustotal.com/api/v3/urls",
headers=HEADERS, data={"url": url}, timeout=15)
if post_resp.status_code == 200:
return -1, 0, 0 # 已提交,等待扫描完成
return -2, 0, 0
def main():
with open("domains_clean.txt") as f:
domains = [line.strip() for line in f if line.strip() and not line.startswith('#')]
# 扫描每个域名的常见APK下载路径
apk_paths = ["/download/app.apk", "/apk/app.apk", "/app-release.apk", "/"]
with open("apk_result.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["domain", "apk_url", "total_engines", "malicious", "suspicious", "status"])
for domain in domains:
for path in apk_paths:
url = f"https://{domain}{path}"
pos, mal, susp = check_url(url)
status = "CLEAN"
if pos >= 3:
status = f"BLOCKED:{pos}_engines"
elif pos == -1:
status = "SUBMITTED"
elif pos == -2:
status = "QUERY_FAILED"
writer.writerow([domain, url, pos if pos >= 0 else "N/A", mal, susp, status])
time.sleep(16) # VT免费API: 4次/分钟 → 间隔15秒
print(f" ✅ {domain}")
print("✅ APK爆毒扫描完成")
if __name__ == "__main__":
main()
💡 VT免费API配额有限,建议优先扫描已知有APK分发的域名。对纯内容站(无APK下载)可以跳过本模块。如果域名数量多且确认都有APK分发,可以升级到VT付费API(每分钟500次)。
五个模块的检测结果怎么合并成一份全局报告?怎么一眼看出哪些域名已经被红、哪个平台最先拦截?
五个检测模块各自产出了一份CSV——现在需要合并成一份全局报告 ,用一份表格看清楚每个域名在五维检测下的状态。
6
合并脚本:五维汇总 + 评分
# 文件: merge_report.py —— 合并五份CSV输出全局报告
import csv
def load_result(filepath, key_col=0, status_col=1):
"""加载检测结果CSV → {domain: status}"""
results = {}
try:
with open(filepath) as f:
reader = csv.reader(f)
next(reader) # 跳过header
for row in reader:
if len(row) > max(key_col, status_col):
results[row[key_col].strip()] = row[status_col].strip()
except FileNotFoundError:
pass
return results
google = load_result("google_result.csv", 0, 1)
qq_wechat = load_result("qq_wechat_result.csv", 0, 1) # QQ状态
wechat = load_result("qq_wechat_result.csv", 0, 3) # 微信状态
antifraud = load_result("antifraud_result.csv", 0, 5)
apk = load_result("apk_result.csv", 0, 5)
with open("domains_clean.txt") as f:
domains = [line.strip() for line in f if line.strip() and not line.startswith('#')]
with open("batch_report.csv", "w", newline="") as f:
writer = csv.writer(f)
writer.writerow(["domain", "google", "qq", "wechat", "antifraud", "apk", "blocked_count", "risk_level"])
for domain in domains:
g = google.get(domain, "NOT_CHECKED")
q = qq_wechat.get(domain, "NOT_CHECKED")
w = wechat.get(domain, "NOT_CHECKED")
a = antifraud.get(domain, "NOT_CHECKED")
p = apk.get(domain, "NOT_CHECKED")
# 计算被拦截维度数
blocked = 0
for s in [g, q, w, a, p]:
if s.startswith("BLOCKED") or s.startswith("WARNING"):
blocked += 1
# 风险等级
if blocked >= 3:
level = "🔴 CRITICAL"
elif blocked >= 1:
level = "🟡 WARNING"
else:
level = "🟢 CLEAN"
writer.writerow([domain, g, q, w, a, p, blocked, level])
# 统计摘要
import subprocess
total = len(domains)
clean = subprocess.getoutput(f"grep -c '🟢' batch_report.csv").strip()
warn = subprocess.getoutput(f"grep -c '🟡' batch_report.csv").strip()
critical = subprocess.getoutput(f"grep -c '🔴' batch_report.csv").strip()
print(f"""
╔══════════════════════════════════════╗
║ 333Check 批量检测全局报告 ║
╠══════════════════════════════════════╣
║ 📊 检测域名总数: {total:>5} ║
║ 🟢 全维度安全: {clean:>5} ║
║ 🟡 至少1维被红: {warn:>5} ║
║ 🔴 三维及以上被红: {critical:>5} ║
╠══════════════════════════════════════╣
║ 报告文件: batch_report.csv ║
╚══════════════════════════════════════╝
""")
运行 :python3 merge_report.py,产出最终文件 batch_report.csv——这就是你的全局检测报告。
批量检测报告示例:100个域名五维检测结果速览
domain
google
qq
wechat
antifraud
apk
risk
shop888.com
CLEAN
CLEAN
CLEAN
CLEAN
CLEAN
🟢0
gamble99.site
BLOCKED
BLOCKED
CLEAN
CLEAN
CLEAN
🟡2
kingdom888.net
BLOCKED
BLOCKED
BLOCKED
BLOCKED
BLOCKED
🔴5
... 共100条记录 ...
📊 汇总:🟢 62个安全 | 🟡 27个部分被红 | 🔴 11个严重被红 — 需立即处理的域名: 11个
▲ 全局报告示例:一屏看完100个域名的谷歌/QQ/微信/反诈/APK五维状态,红黄绿三色快速决策
批量检测完发现被红域名后,怎么分类处理效率最高?不同被红组合的成本和时间线有什么差异?
拿到批量报告后,最关键的决策是按风险等级分类处理 。下面这张处理决策表可以作为SOP贴在电脑旁边:
被红组合
风险等级
优先级
自助处理时间
专业处理时间
推荐服务
仅谷歌 Safe Browsing 标红
🟡 中
P1 — 24h内处理
Search Console申诉 3-7天
24h内清除
谷歌防红 500U/月
谷歌 + QQ + 微信三平台
🔴 高
P0 — 立即处理
几乎不可能(三平台协作申诉)
48h内全部清除
全平台防护 1200U/月
防反诈DNS被劫持(单运营商)
🟡 中
P1 — 72h内处理
联系该运营商解封 5-14天
5-10天
防反诈屏蔽 1200U/月起
APK爆毒连坐域名(VT≥3引擎)
🔴 高
P0 — 立即清除APK
APK加固+重扫 5-14天
3-5天全部清除
APK爆毒清除 1000U/次
五维全红(谷歌+QQ+微信+反诈+APK)
🔴🔴 严重
P0 — 立即停用域名
不建议自助,建议换域名
7-14天逐个清理
全平台清除 2000U/月
⚠️ 批量检测后的黄金行动窗口
检测出被红域名后,不要等 。谷歌Safe Browsing标红后15分钟内就开始向Chrome浏览器分发黑名单;QQ微信的拦截在2-6小时内生效;防反诈DNS屏蔽在24-48小时内向全国运营商同步。这个时间差是你的黄金行动窗口——抢在全部平台生效前处理,远比被全平台标红后「逐个灭火」容易得多。
🔄 建议:把批量检测变成定时任务
一次性搭好工具链后,加一个 crontab 定时任务就能实现7×24小时无人值守批量检测 。例如每天凌晨3点自动跑一轮,异常结果自动推送到微信/Telegram/钉钉:0 3 * * * cd /path/to/toolchain && bash run_all.sh 2>&1 | mail -s "域名日检报告" [email protected] 。花半小时搭好、以后每天省4小时——这笔账怎么算都划算。
客户怎么说?
「我们公司有200多个推广域名,以前每周靠实习生逐个手动检查。用了你们这套批量检测工具链后,每天早上9点准时收到全局报告,哪几个域名被谷歌标红、哪几个QQ里打不开一清二楚。实习生再也不用来干这个了,招来做更有价值的事了。」
——某信息流广告代理公司,接入Ai防红全平台防护1200U/月
「我们的棋牌APP之前每天被封,接入Ai防红后连续运营90天零封禁。」
——某东南亚游戏运营商,月付1500U套餐
「之前用Virustotal手动扫描APK下载链接效率太低了,50个域名要花一下午。你们的批量脚本一次API调用扫完,还能自动对比历史扫描结果,第一时间发现APK被标记——帮我们抢在连坐到域名之前处理掉了。」
——某安卓应用分发平台,APK爆毒清除1000U/次 + 谷歌防红500U/月
检测到域名被红?
先用 333Check 免费全平台检测确认域名当前状态,覆盖谷歌、QQ、微信、反诈、Virustotal 五大维度。 如需批量监控或专业清除服务,联系 @AICDN 免费测试——专业团队帮你从检测到清除一站式搞定。
🔍 提交域名 · 免费全平台检测