logo
0
0
WeChat Login

IP 屏蔽检测

检测 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 配置中自行增减。


后端部署

Cloudflare Worker

  1. 安装 Wrangler CLI
  2. 创建 KV 命名空间:
wrangler kv:namespace create "IP_BLOCK_DETECTION"
  1. 创建 wrangler.toml 配置文件:
name = "ip-block-detection" main = "scripts/cloudflare.js" [triggers] crons = ["*/30 * * * *"] [[kv_namespaces]] binding = "KV" id = "<your-namespace-id>"
  1. 部署:
wrangler deploy

Deno Deploy

  1. 登录 Deno Deploy 控制台
  2. 创建新项目,入口文件指向 scripts/deno.js
  3. 无需额外配置,Deno KV 和 Cron 自动可用

API 接口

两个后端提供相同的 REST API:

接口说明
GET /check手动触发一次检测
GET /latest获取最新检测摘要
GET /history/{yyyy-MM-dd}获取指定日期的检测历史
GET /report/results/{yyyy-MM-dd}/{timestamp}获取某次完整报告
GET /API 说明

所有接口均支持 CORS 跨域访问。

KV 数据结构

TTL
results/{日期}/{时间}完整检测报告 JSON90 天
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,优先级高于构建时的环境变量。