域名检测工具源码,PHP开源免费,一键查询微信拦截和域名被墙
为什么写这个
日常运营中,域名莫名其妙在微信里打不开,或者突然海外能访问、国内访问不了,排查起来非常折腾。常见做法是:
- 手动复制域名到微信里测试(麻烦、不自动化)
- 靠第三方接口查(但接口供应商经常换,写死代码就崩)
- 被墙检测靠自己 ping + 翻出去对比(费时)
所以做了一个纯 PHP 的域名检测系统,支持:
- 微信拦截检测:域名在微信内是否被拦截(分享打不开、跳转被封)
- 域名被墙检测:DNS 污染对比 + 海外节点连通性探测(综合判定是否被墙)
效果预览
输入域名,点击「开始检测」,即可同时检测两项:
- 微信拦截:绿色「正常」/ 红色「已拦截」
- 被墙检测:绿色「正常」/ 红色「已拦截」,附带 DNS 污染与海外连通性详情
- 支持点击「查看详情」展开原始检测数据,方便调试排查
功能特点
架构设计(扩展点一览)
整个系统围绕 5 个扩展点 设计,后续加新检测能力(微博拦截、QQ 拦截、Telegram 屏蔽等)都不需要改已有代码:
注册表/插件 → DetectorRegistry,register() 即接入
事件/回调 → EventManager(before/after/task 等)+ Webhook
配置驱动 → config.php 集中控制所有开关与参数
预留扩展字段 → DetectionResult->extra / provider_results
检测原理简述
微信拦截检测
微信官方公开检测接口已于 2026 年初失效,目前系统采用两种可靠方案:
方案 A:第三方聚合 API(推荐快速接入)
注册 nowapi、5la 等获取 key,在 config.php 中填入并开启。返回字段通过配置映射(status_path、blocked_values 等)适配,换供应商不需要改代码。
方案 B:公众号后台 Cookie 接口(判定最准)
登录 https://mp.weixin.qq.com,F12 抓 checkurl 接口的 Cookie + token,填入配置。建议用测试号/备用号,登录态会失效。
被墙检测
| 信号 | 说明 | 判定 |
|---|---|---|
| DNS 污染 | 对比本地解析与海外 DoH(8.8.8.8 / 1.1.1.1)结果 | 本地失败/不一致 → 疑似 |
| 海外连通 | check-host.net 多节点 TCP 443 探测 | 海外是否可达 |
| 综合判定 | DNS 被污染 + 海外可达 | blocked 极大概率被墙 |
部署教程
前置要求
- PHP 8.0+(需 curl、openssl、json 扩展)
- Web 服务器(Nginx / Apache / 宝塔 / 虚拟主机均可)
- 无需数据库,无需 Composer
1. 下载并上传
将程序包上传到服务器网站目录:
website_root/
├── public/ ← 网站根目录(指向这里)
├── src/
├── config/
├── bin/
├── tests/
└── storage/ ← 运行时自动生成(需可写)
public/,否则源码文件会暴露。宝塔面板操作:
- 网站 → 添加站点 → 根目录设为
.../public - 运行目录设为
/public - 伪静态选「PHP 默认」(
index.php自带路由解析,无需额外 rewrite)
虚拟主机操作:
- 将
public/下文件(index.php、index.html、assets/)放到网站根目录 - 将
src/、config/放到上一级目录(相对路径已写死,需保持层级) - 或请求主机商修改根目录为
public/
2. 给 storage 写权限
宝塔直接设目录权限 755 或 775;命令行执行:
chmod -R 755 storage/
storage/ 目录首次运行会自动创建,包含 tasks/、cache/、logs/。
3. 验证运行
浏览器打开站点,应看到检测页面。访问 /api/status 返回 JSON 即说明 API 正常:
GET /api/status
{"ok":true,"detectors":[{"name":"wechat","enabled":true},{"name":"wall","enabled":true}]}
命令行测试(可选):
php tests/selftest.php baidu.com
4. 配置微信检测源(可选,被墙检测默认已可用)
编辑 config/config.php,开启第三方 API 或公众号 Cookie 检测:
// config/config.php — 微信检测源配置
'providers' => [
[
'name' => 'nowapi',
'type' => 'thirdparty',
'enabled' => true, // ← 打开
'api_url' => 'https://api.oioweb.cn/api/wxcheck',
'key' => 'YOUR_KEY', // ← 填你的 key
'method' => 'GET',
'url_field'=> 'url',
'key_field'=> 'key',
'timeout' => 10,
'response' => [
'status_path' => 'code',
'message_path' => 'msg',
'blocked_values'=> [2],
'normal_values' => [1],
],
],
],
第三方接口返回结构不同,改 response 字段映射即可适配,不需要改代码。
开发环境启动(本地调试)
cd 项目目录
./bin/server.sh 8080
浏览器访问 http://127.0.0.1:8080
REST API 使用
同步检测(默认)
GET /api/check?url=example.com&sync=1
请求内阻塞执行,返回完整结果。
异步检测
GET /api/check?url=example.com&sync=0&webhook=https://your-server.com/callback
返回 task_id,后台 worker 执行,完成后 POST 结果到 webhook。轮询结果:
GET /api/task/{task_id}
注意事项
- 检测结果受网络环境和检测源稳定性影响,仅供参考,请结合实际微信内 / 国内网络实测。
- 请仅用于自有域名自检与运维,勿用于违规用途。
- 第三方检测源与公众号接口有风控风险,请控制调用频率。
rate_limit可简单限流。 - 生产环境建议对
/api/*加访问鉴权(Token / IP 白名单),避免接口被滥用。
扩展提示
如需新增检测平台(如微博、QQ、Telegram),只需:
- 新建
src/Detectors/YourDetector.php实现DetectorInterface - 在
src/autoload.php的build_registry()中register()注册 - 系统 API 会自动调度,无需改路由
发表回复