检测 Cloudflare / Deno 等平台的边缘节点 IP 是否被抖音、哔哩哔哩、小红书、今日头条等网站屏蔽。后端定时请求目标站点并综合判定屏蔽状态,结果存入 KV;前端以仪表板形式可视化展示。
├── scripts/
│ ├── cloudflare.js # Cloudflare Worker 后端(定时检测 + KV 存储 + API)
│ └── deno.js # Deno Deploy 后端(定时检测 + KV 存储 + API)
└── web/ # Vue 3 + Vite 前端面板
├── src/
│ ├── App.vue
│ ├── components/
│ │ ├── AppHeader.vue # 导航栏 + 平台选项卡
│ │ ├── DetectionResult.vue # 检测结果面板
│ │ ├── StatusCard.vue # 单站点状态卡片
│ │ ├── HistorySection.vue # 历史趋势
│ │ └── SettingsModal.vue # API 地址设置弹窗
│ ├── composables/
│ │ └── useSettings.js # 设置管理(localStorage + 环境变量)
│ └── utils/
│ └── api.js # API 请求工具
├── .env.example
├── package.json
└── vite.config.js
通过以下四个维度综合判定 IP 是否被屏蔽:
| 维度 | 说明 |
|---|---|
| HTTP 状态码 | 403/451/412 等判定为屏蔽,301/302/503 等判定为疑似 |
| 响应体关键词 | 匹配"验证码"、"安全验证"、"访问受限"等判定为屏蔽 |
| 重定向检测 | 最终 URL 含 verify/captcha/security 等判定为屏蔽 |
| 响应体长度 | HTML 响应 < 1000 字符可能为拦截页面,判定为疑似 |
判定结果分为四个级别:normal(正常)、suspect(疑似)、blocked(屏蔽)、error(异常)。
| 站点 | 域名 |
|---|---|
| 抖音 | douyin.com |
| 哔哩哔哩 | bilibili.com |
| 小红书 | xiaohongshu.com |
| 今日头条 | toutiao.com |
可在脚本顶部的 TARGET_SITES 配置中自行增减。
- 安装 Wrangler CLI
- 创建 KV 命名空间:
wrangler kv:namespace create "IP_BLOCK_DETECTION"- 创建
wrangler.toml配置文件:
name = "ip-block-detection"
main = "scripts/cloudflare.js"
[triggers]
crons = ["*/30 * * * *"]
[[kv_namespaces]]
binding = "KV"
id = "<your-namespace-id>"- 部署:
wrangler deploy- 登录 Deno Deploy 控制台
- 创建新项目,入口文件指向
scripts/deno.js - 无需额外配置,Deno KV 和 Cron 自动可用
两个后端提供相同的 REST API:
| 接口 | 说明 |
|---|---|
GET /check |
手动触发一次检测 |
GET /latest |
获取最新检测摘要 |
GET /history/{yyyy-MM-dd} |
获取指定日期的检测历史 |
GET /report/results/{yyyy-MM-dd}/{timestamp} |
获取某次完整报告 |
GET / |
API 说明 |
所有接口均支持 CORS 跨域访问。
| 键 | 值 | TTL |
|---|---|---|
results/{日期}/{时间} |
完整检测报告 JSON | 90 天 |
latest_summary |
最新一次检测摘要 | 永久 |
history/{日期} |
当天检测统计列表 | 90 天 |
cd web
npm install
npm run dev构建时可传入默认 API 地址,用户也可在页面设置中覆盖:
VITE_CLOUDFLARE_API_URL=https://your-worker.workers.dev \
VITE_DENO_API_URL=https://your-project.deno.dev \
npm run build或创建 .env 文件(参考 .env.example):
VITE_CLOUDFLARE_API_URL=
VITE_DENO_API_URL=
自动跟随浏览器系统主题(深色/浅色),无需手动切换。
localStorage 设置 > 构建时环境变量 > 空
用户在设置弹窗中填写的 URL 会保存到浏览器 localStorage,优先级高于构建时的环境变量。