详细技术介绍与功能架构
NetPulse (网络脉冲)
基于 Cloudflare Pages 边缘计算的多信号融合网络可达性与连通性诊断系统
A Modern, Multi-Signal Weighted Network Accessibility & Connectivity Diagnostics Platform
📖 目录
- 💡 项目简介
- ✨ 核心特性
- 🏛️ 系统架构
- 📊 判定模型与算法规范
- 📁 目录结构
- 🚀 快速开始与本地开发
- ⚙️ 配置说明与环境变量
- 📡 REST API 接口规范
- 🚢 生产部署指南
- 🔄 运维与数据更新
- 🛡️ 安全设计与防护机制
- ⚖️ 隐私与免责声明
- 📄 开源协议与致谢
💡 项目简介
NetPulse 是一款轻量、极速且具备企业级安全防护的网络可达性与域名状态综合诊断工具。
传统的连通性测试工具通常依赖于单一维度的 Ping 或 curl 测试,极易因各地网络波动、CDN 节点屏蔽或单纯的 HTTP 状态异常导致误报(False Positives)与漏报(False Negatives)。
NetPulse 依托 Cloudflare 全球边缘网络(Pages Functions) 与 Cloudflare KV 分布式缓存,将权威阻断数据库比对、Cloudflare DoH 域名解析及已知 DNS 污染 IP 分析、边缘节点真实 HTTP/HTTPS 握手连通性探测三路信号通过数学模型进行动态加权评估,输出包含状态判定、综合置信度分数及逐项信号详情的精确诊断报告。
前端采用纯原生深色赛博朋克极简美学设计(Vanilla HTML5 + CSS3 + 现代 ES 模块),无重度框架依赖,首屏毫秒级冷启动,并完整支持 8 种语言的本地化切换。
✨ 核心特性
- 🔬 三路信号融合判定(Multi-Signal Verdict):
- GreatFire / GFWList 数据集(权重 50%):精确匹配与父域名继承匹配。
- Cloudflare DoH DNS 污染分析(权重 30%):毫秒级解析与内置已知 DNS 污染 IP 库进行比对。
- 边缘节点 HTTP 连通性探测(权重 20%):智能协议自适应与网络时延测算。
- ⚡ 自适应多级边缘缓存(Adaptive KV Cache):
- 基于 Cloudflare Workers KV,根据诊断状态动态分配 TTL(正常 300s、阻断 1800s、受限 180s、下线 120s)。
- SHA-256 域名哈希索引,毫秒级 Cache Hit 极速响应,大幅减轻源站与外部 API 压力。
- 🛡️ 严格的企业级安全防御(Enterprise Defense-in-Depth):
- 全面 SSRF 防御:严格拦截 IPv4/IPv6 私有内网网段(RFC1918、环回、链路本地、运营商保留段等)以及云服务商元数据端点(如
169.254.169.254)。 - 双重速率限制(Rate Limiting):基于 IP 的固定时间窗口限制(10 次/分,100 次/时),异步非阻塞更新计数器。
- 全套安全响应头:强制 CSP、HSTS、
X-Content-Type-Options: nosniff、X-Frame-Options: DENY,防范 XSS、点击劫持与 MIME 混淆。
- 全面 SSRF 防御:严格拦截 IPv4/IPv6 私有内网网段(RFC1918、环回、链路本地、运营商保留段等)以及云服务商元数据端点(如
- 🎨 前沿赛博深色科技风设计(Cyberpunk Aesthetics):
- 极光光晕背景、动态雷达扫描动画、拟物化状态呼吸指示灯与平滑进场动画。
- 支持单域名诊断与批量诊断(最多 5 个域名并发并行)。
- 纯 CSS 响应式自适应布局(适配桌面、平板、移动端触摸屏)。
- 🌐 多语言国际化(i18n):
- 内置 8 种语言支持:简体中文 (
zh-CN)、繁体中文 (zh-TW)、English (en)、日本語 (ja)、한국어 (ko)、Español (es)、Deutsch (de)、Français (fr)。 - 浏览器首选语言自动嗅探 + 本地存储持久化。
- 内置 8 种语言支持:简体中文 (
- 🔒 严格零数据收集与隐私保障(Privacy First):
- 诊断历史记录完全保留在用户浏览器的
localStorage中,服务端不持久化记录任何用户的查询历史。
- 诊断历史记录完全保留在用户浏览器的
- 🤖 全自动化数据运维(CI/CD & Sync Automation):
- GitHub Actions 每周一定时从开源上游(Citizen Lab 与 GFWList)拉取最新域名阻断规则并自动更新内联数据集。
- 代码推送自动触发 Cloudflare Pages 构建与部署。
🏛️ 系统架构
架构流程拓扑
flowchart TD
Client["用户前端 (Browser UI / API Client)"] --> Middleware["functions/api/_middleware.ts<br/>(CORS / 安全头 / 请求合法性过滤)"]
subgraph EdgeBackend["Cloudflare Pages Functions (Edge API)"]
Middleware --> Router["functions/api/check.ts<br/>(POST /api/check)"]
Router --> RateLimit{"速率限制<br/>(src/security/ratelimit.ts)"}
RateLimit -- 超过限制 --> Resp429["返回 429 Too Many Requests"]
RateLimit -- 允许 --> Validator{"输入校验 & SSRF 过滤<br/>(src/security/validator.ts)"}
Validator -- 非法/私有地址 --> Resp400["返回 400 Bad Request"]
Validator -- 合法 URL --> Engine["检测核心调度<br/>(src/checker/index.ts)"]
Engine --> KVCache{"查询 KV 缓存<br/>(src/cache/kv.ts)"}
KVCache -- Cache Hit --> CachedResp["读取缓存返回 (fromCache: true)"]
KVCache -- Cache Miss --> Signals["并发执行三路检测<br/>(Promise.allSettled)"]
subgraph SignalsGroup["三路检测信号"]
Signals --> SigGF["1. GreatFire 数据集匹配<br/>(src/checker/greatfire.ts)"]
Signals --> SigDNS["2. Cloudflare DoH 解析<br/>(src/checker/dns.ts)"]
Signals --> SigHTTP["3. 边缘 HTTP/HTTPS 探测<br/>(src/checker/http.ts)"]
end
SigGF --> Verdict["综合评判研判算法<br/>(src/checker/verdict.ts)"]
SigDNS --> Verdict
SigHTTP --> Verdict
Verdict --> AsyncCache["异步回写 KV 缓存<br/>(根据状态设置 TTL)"]
end
Verdict --> RespSuccess["返回诊断结果 JSON (200 OK)"]
CachedResp --> RespSuccess
RespSuccess --> Client
技术栈构成
| 层级 | 技术选型 | 说明 |
|---|---|---|
| 前端展现层 | Vanilla HTML5 / CSS3 / ES2022 JavaScript | 零外部前端框架依赖,极小打包体积,极速加载性能 |
| 设计与动画 | CSS 变量、@keyframes、Flexbox / Grid、SVG | 赛博深色主题,支持 prefers-reduced-motion 减弱动画 |
| 边缘计算层 | Cloudflare Pages Functions | 部署在 Cloudflare 全球 300+ 边缘节点,V8 隔离沙箱运行 |
| 存储与缓存 | Cloudflare Workers KV | 分布式高性能键值数据库,支持纳秒级读取与自过期机制 |
| 开发与类型 | TypeScript 5.x/6.x、Wrangler CLI | 严格类型系统保障无 any 越界,规范工程化开发流程 |
| 测试框架 | Vitest | 快速执行单元测试与类型集成校验 |
📊 判定模型与算法规范
NetPulse 采用加权评分与降级重归一化机制,结合特征规则进行最终状态判定。
1. 信号评分规则
| 探测维度 | 模块 | 权重 | 判定条件与单项得分 |
|---|---|---|---|
| GreatFire / GFWList | src/checker/greatfire.ts |
50% | • 精确命中黑名单:score = 1.0• 命中父级域名: score = 0.85• 未命中: score = 0.0 |
| DNS 污染探测 | src/checker/dns.ts |
30% | • 命中已知 DNS 污染 IP 库:score = 0.95 (poisoned = true)• NXDOMAIN (不存在域名): score = 0.4• DoH 请求超时或异常: score = 0.2 (checked = false)• 正常解析且未被污染: score = 0.0 |
| 边缘 HTTP 探测 | src/checker/http.ts |
20% | • 正常响应 (2xx/3xx/4xx/5xx):score = 0.0 (reachable = true)• 连接超时 / 网络不可达: score = 0.25 (checked = false) |
2. 动态权重重归一化
若网络抖动导致 DNS 或 HTTP 信号探测超时(checked === false),引擎会自动将失败信号的权重置为 0,并将剩余可用信号的权重进行等比例重归一化(Re-normalization),避免因单点网络异常导致结果出现剧烈偏差。
3. 最终状态与置信度定义
根据加权总得分($S \in [0.0, 1.0]$),系统确定最终状态与置信度(Confidence):
判定状态 (status) |
触发条件 | 置信度计算公式 | 业务含义 |
|---|---|---|---|
unavailable |
特殊优先规则:HTTP 不可达 且 未命中黑名单 且 DNS 未被污染 且 DNS 解析失败 | $0.80 + (0.30 - S) \times 0.67$ | 服务下线/故障:目标服务器自身停止服务或域名未解析,非人为网络封锁。 |
blocked |
$S \ge 0.60$ | $0.70 + (S - 0.60) \times 0.75$ | 受到封锁:域名在阻断列表中或解析结果存在明确的 DNS 污染。 |
restricted |
$0.30 \le S < 0.60$ | $0.40 + S \times 0.40$ | 连接受限:存在部分异常信号或父域阻断,可能存在间歇性干扰。 |
accessible |
$S < 0.30$ | $0.80 + (0.30 - S) \times 0.67$ | 正常访问:三路检测指标均表现良好,未发现封锁与污染迹象。 |
error |
DNS 与 HTTP 两路异步探测均发生严重故障或超时 | $0.00$ | 探测异常:网络诊断通道受阻,无法获得有效观测数据。 |
所有的置信度均在
[0.00, 1.00]范围内自动截断并保留两位小数。
📁 目录结构
netpulse/
├── .github/
│ └── workflows/
│ ├── deploy.yml # Cloudflare Pages 自动构建与部署工作流
│ └── update-blocklist.yml # 每周一定时拉取最新封锁名单并自动提交
├── data/
│ └── blocklist/
│ ├── dns_poisoned_ips.json # 已知 GFW 污染常用假 IP 地址库
│ ├── greatfire_domains.json # 离线打包的阻断域名数据集合
│ └── sensitive_domains.json # 敏感内网、元数据端点与黑名单定义
├── functions/ # Cloudflare Pages Functions 边缘函数
│ └── api/
│ ├── _middleware.ts # 全局安全中间件 (CORS、Header 与方法鉴权)
│ └── check.ts # POST /api/check 诊断接口入口
├── public/ # 前端静态资源目录 (Pages 托管入口)
│ ├── _headers # 生产静态响应头 (CSP, HSTS, 缓存控制)
│ ├── _redirects # URL 重定向规则
│ ├── index.html # 主界面 HTML (包含无障碍与模板系统)
│ ├── assets/
│ │ ├── css/
│ │ │ ├── main.css # 主题样式变量、布局与各组件设计
│ │ │ ├── animations.css # 动画特效 (@keyframes、雷达、指示灯)
│ │ │ └── responsive.css # 响应式断点适配 (桌面 / 平板 / 手机)
│ │ └── js/
│ │ ├── api.js # API 通信与错误统一处理模块
│ │ ├── app.js # 主控制器与事件绑定模块
│ │ ├── history.js # 本地 localStorage 历史管理模块
│ │ ├── i18n.js # 多语言加载、自动检测与替换模块
│ │ ├── ui.js # DOM 渲染、模板克隆与安全渲染模块
│ │ └── validator.js # 客户端轻量 URL 格式与协议校验
│ └── locales/ # 国际化多语言翻译 JSON
│ ├── de.json # 德语 (Deutsch)
│ ├── en.json # 英语 (English)
│ ├── es.json # 西班牙语 (Español)
│ ├── fr.json # 法语 (Français)
│ ├── ja.json # 日语 (日本語)
│ ├── ko.json # 韩语 (한국어)
│ ├── zh-CN.json # 简体中文
│ └── zh-TW.json # 繁体中文
├── scripts/
│ ├── update-blocklist.js # Node.js 版封锁域名更新清洗脚本
│ └── update-blocklist.sh # Shell 版封锁域名更新清洗脚本
├── src/ # 核心后端逻辑 (TypeScript 模块)
│ ├── cache/
│ │ └── kv.ts # Cloudflare KV 缓存读写封装与 TTL 计算
│ ├── checker/
│ │ ├── dns.ts # Cloudflare DoH 域名解析与污染探测
│ │ ├── greatfire.ts # 本地内联阻断域名高效检索模块
│ │ ├── http.ts # 边缘 HTTP/HTTPS HEAD 请求探测
│ │ ├── index.ts # 诊断调度主控制器 (缓存 / 并发 / 研判)
│ │ └── verdict.ts # 加权评分与最终结论判定算法
│ ├── security/
│ │ ├── ratelimit.ts # IP 固定窗口速率限制器
│ │ └── validator.ts # 服务端严苛 URL 校验与 CIDR 私网防御
│ ├── utils/
│ │ ├── hash.ts # Web Crypto SHA-256 哈希工具
│ │ └── url.ts # URL 规范化与键生成工具
│ └── types.ts # 全局强类型定义契约
├── tests/ # 自动化测试用例目录
├── package.json # 项目依赖与运行脚本
├── tsconfig.json # TypeScript 严格模式配置
└── wrangler.toml # Cloudflare Pages & KV 配置文件
🚀 快速开始与本地开发
环境要求
- Node.js:
>= 20.0.0 - npm:
>= 10.0.0 - Git:
>= 2.40.0
1. 克隆仓库并安装依赖
git clone https://github.com/yebin1982/netpulse.git
cd netpulse
# 安装开发依赖
npm install
2. 初始化/更新封锁数据集
在首次启动前,确保 data/blocklist/greatfire_domains.json 数据集完整可用:
npm run update-blocklist
3. 登录 Cloudflare(可选,本地模拟 KV)
若需在本地调试 Cloudflare KV 缓存绑定:
npx wrangler login
4. 启动本地开发服务器
使用 Wrangler 启动本地 Pages 模拟环境(包含边缘 Functions 运行时支持):
npm run dev
本地服务将启动并运行在:http://localhost:8788。在浏览器打开即可进入 NetPulse 界面。
5. 执行类型检查与测试
# 执行严格 TypeScript 类型无输出编译检查
npm run build
# 运行单元测试
npm run test
⚙️ 配置说明与环境变量
wrangler.toml 配置说明
核心配置文件位于根目录的 wrangler.toml:
name = "netpulse"
pages_build_output_dir = "public"
compatibility_date = "2024-01-01"
[vars]
APP_VERSION = "1.0.0"
MAX_BATCH_SIZE = 5 # 批量检测最大支持 URL 数量
CACHE_TTL_ACCESSIBLE = 300 # 正常访问结果缓存 5 分钟 (秒)
CACHE_TTL_BLOCKED = 1800 # 封锁结果缓存 30 分钟 (秒)
CACHE_TTL_RESTRICTED = 180 # 受限结果缓存 3 分钟 (秒)
CACHE_TTL_UNAVAILABLE = 120 # 下线/不可用结果缓存 2 分钟 (秒)
RATE_LIMIT_PER_MINUTE = 10 # 单 IP 每分钟最大请求次数
RATE_LIMIT_PER_HOUR = 100 # 单 IP 每小时最大请求次数
ALLOWED_ORIGIN = "" # 允许的 CORS 跨域域名 (留空则使用默认策略)
[[kv_namespaces]]
binding = "KV"
id = "YOUR_CLOUDFLARE_KV_ID" # 生产环境绑定的 KV ID
📡 REST API 接口规范
除了 Web 界面外,NetPulse 提供了标准的高性能 RESTful API 供自动化脚本调用。
诊断接口
- 路径:
POST /api/check - 方法:
POST/OPTIONS - 请求头要求:
Content-Type: application/jsonX-Requested-With: XMLHttpRequest(防 CSRF 伪造必填)
请求体示例
{
"urls": [
"https://google.com",
"https://baidu.com"
]
}
注意:单个请求支持 1 至 5 个 URL。如果 URL 省略协议头(如
baidu.com),系统将自动补充规范化https://。
成功响应示例 (200 OK)
{
"success": true,
"results": [
{
"url": "https://google.com",
"normalizedDomain": "google.com",
"status": "blocked",
"confidence": 1.0,
"signals": {
"greatfire": {
"inBlocklist": true,
"score": 1.0,
"dataVersion": "2026-06-01"
},
"dns": {
"resolved": true,
"poisoned": true,
"resolvedIPs": ["37.61.54.158"]
},
"http": {
"reachable": true,
"statusCode": 301,
"responseTimeMs": 142
}
},
"fromCache": false,
"cachedAt": null,
"checkedAt": "2026-09-16T09:55:00.000Z"
},
{
"url": "https://baidu.com",
"normalizedDomain": "baidu.com",
"status": "accessible",
"confidence": 0.98,
"signals": {
"greatfire": {
"inBlocklist": false,
"score": 0.0,
"dataVersion": "2026-06-01"
},
"dns": {
"resolved": true,
"poisoned": false,
"resolvedIPs": ["110.242.68.66", "110.242.68.65"]
},
"http": {
"reachable": true,
"statusCode": 200,
"responseTimeMs": 68
}
},
"fromCache": true,
"cachedAt": "2026-09-16T09:50:12.000Z",
"checkedAt": "2026-09-16T09:50:12.000Z"
}
]
}
响应字段解析
| 字段 | 类型 | 说明 |
|---|---|---|
url |
string |
客户端原始传入的目标 URL |
normalizedDomain |
string |
系统去除协议、端口、多余路径后的规范化域名 |
status |
string |
最终判定:accessible | blocked | restricted | unavailable | error |
confidence |
number |
综合研判置信度,取值范围 0.00 ~ 1.00 |
signals.greatfire |
object |
阻断库匹配结果(是否命中 inBlocklist,得分 score,数据版本号) |
signals.dns |
object |
DNS 解析结果(是否解析成功 resolved,是否污染 poisoned,解析所得 IP 列表) |
signals.http |
object |
HTTP 探测结果(是否连通 reachable,HTTP 状态码 statusCode,探测耗时 responseTimeMs) |
fromCache |
boolean |
是否直接命中 KV 缓存结果 |
cachedAt |
string | null |
缓存生成的最初时间戳 (ISO8601) |
checkedAt |
string |
本次检测或被缓存时的检测执行时间戳 (ISO8601) |
错误响应示例
-
触发速率限制 (
429 Too Many Requests){ "success": false, "error": "Too Many Requests", "errorCode": "RATE_LIMIT" }包含响应头:
Retry-After: 48,X-RateLimit-Reset: 1780000000 -
SSRF 非法地址拦截 (
400 Bad Request){ "success": false, "error": "All provided URLs are invalid", "errorCode": "PRIVATE_ADDRESS" } -
合规风控与违规域名拦截 (
400 Bad Request){ "success": false, "error": "All provided URLs are invalid", "errorCode": "COMPLIANCE_VIOLATION" }
cURL 终端测试指令
# 正常诊断测试
curl -s -X POST "http://localhost:8788/api/check" \
-H "Content-Type: application/json" \
-H "X-Requested-With: XMLHttpRequest" \
-d '{"urls":["https://google.com","https://baidu.com"]}' | jq .
🚢 生产部署指南
1. Cloudflare Dashboard 初始化
- 创建 KV 命名空间:
- 登录 Cloudflare Dashboard → Workers & Pages → KV。
- 点击 Create namespace,创建
NETPULSE_KV。 - 将生成的 Namespace ID 复制并填入
wrangler.toml的[[kv_namespaces]]中的id。
- 创建 Pages 项目:
- 进入 Workers & Pages → Pages → Connect to Git。
- 选择本仓库
netpulse。 - 构建预设选择 None。
- 构建命令填写:
npm run build - 输出目录填写:
public
- 绑定 KV 命名空间:
- 在已创建的 Pages 项目设置中:Settings → Functions → KV namespace bindings。
- 添加变量绑定:Variable name =
KV,KV namespace 选择刚刚创建的NETPULSE_KV。
- 绑定自定义域名:
- Pages 项目页面 → Custom domains → 添加你所拥有的域名(Cloudflare 将自动配置边缘 SSL 与 CDN 路由)。
2. GitHub Actions 持续集成自动化配置
本仓库已内置自动化工作流 .github/workflows/deploy.yml。
请在 GitHub 仓库中配置以下两个 Secrets:
- 进入 GitHub 仓库 → Settings → Secrets and variables → Actions → New repository secret:
CF_API_TOKEN:Cloudflare API 令牌(需要具备 Cloudflare Pages: Edit 权限)。CF_ACCOUNT_ID:Cloudflare 账户 ID(可在 Cloudflare 仪表盘右侧获取)。
配置完成后,每次向 main 分支执行 git push,系统都会自动完成 TypeScript 类型校验并秒级部署至 Cloudflare 生产边缘。
🔄 运维与数据更新
自动化同步机制
仓库内置了 GitHub Actions 定时更新工作流 .github/workflows/update-blocklist.yml:
- 触发周期:每周一 02:00 UTC(北京时间每周一 10:00)自动触发。
- 运行流程:
- 运行
scripts/update-blocklist.js从上游数据源拉取最新条目。 - 提取有效主机名、规范化小写并去重排序。
- 若检测到数据变化,自动以 Bot 身份提交并 Push 到仓库,随后触发 Pages 自动构建与部署。
- 运行
手动即时更新
如果需要紧急更新域名数据:
- 方式一:进入 GitHub 仓库页面 → Actions → 选择 Update Blocklist → 点击 Run workflow。
- 方式二:在本地执行
npm run update-blocklist并提交更改推送至远程仓库。
监控与关键指标参考
| 监控项 | 监控位置 | 告警建议阈值 |
|---|---|---|
| Functions 报错率 | Cloudflare Pages → Functions → Analytics | 错误率 > 5% |
| KV 写入次数 | Cloudflare KV → Metrics | > 800 次/天 (免费计划额度 1000 次/天) |
| P95 响应时延 | Cloudflare Analytics | 缓存未命中时 > 5000ms;缓存命中时 > 200ms |
🛡️ 安全设计与合规防护机制
NetPulse 针对公网诊断服务可能遭遇的各类攻击与合规风险实施了纵深防御:
- 合规风控与有害内容前置拦截 (
src/security/validator.ts):- 严格依据法律法规要求,系统内置了对涉及暴恐、黄赌毒、电信诈骗及恶意钓鱼等违法违规敏感特征域名的前置过滤,拦截后直接返回
COMPLIANCE_VIOLATION,禁止探查。
- 严格依据法律法规要求,系统内置了对涉及暴恐、黄赌毒、电信诈骗及恶意钓鱼等违法违规敏感特征域名的前置过滤,拦截后直接返回
- 严苛的服务端输入白名单与防 SSRF 校验 (
src/security/validator.ts):- 绝不信任客户端传输的格式。
- 过滤超长 URL(限制最长 2048 字符)。
- 协议白名单仅允许
http:与https:,坚决拒绝file:,gopher:,javascript:,data:等危险协议。 - 手写无外部依赖的 CIDR 掩码位运算,拦截私有 IPv4 (
10.0.0.0/8,172.16.0.0/12,192.168.0.0/16,127.0.0.0/8,100.64.0.0/10)、链路本地 (169.254.0.0/16) 及广播/保留段。 - 拦截私有局域网域名与特殊 TLD(如
.localhost,.local,.internal,.corp等)。 - 严禁探测云厂商元数据接口(
169.254.169.254,metadata.google.internal)。
- 防重放与请求合法性校验 (
functions/api/_middleware.ts):- 强制客户端必须包含
X-Requested-With: XMLHttpRequest请求头,阻止常规跨站表单提交与恶意扫描器。 - 生产环境严格校验
Origin来源,仅允许指定信任域名跨域。
- 强制客户端必须包含
- 客户端与渲染 XSS 绝对防护 (
public/assets/js/ui.js):- 所有用户输入或后端返回的域名与 URL 字符,渲染至 DOM 时一律强制采用
textContent注入,杜绝innerHTML带来的 DOM-based XSS 风险。 - HTML 页面启用严格 CSP(Content-Security-Policy),禁止内联脚本执行。
- 所有用户输入或后端返回的域名与 URL 字符,渲染至 DOM 时一律强制采用
⚖️ 隐私与免责声明
- 服务性质与技术中立性(严正非翻墙声明):
- NetPulse 为纯中立的开源网络工程排错与连通性分析工具。本系统绝非翻墙代理、VPN 或网络穿透工具,亦不提供任何绕过国家网络监管的信道或技术手段。严禁用于任何非法网络活动。
- 数据隐私保障(零日志):
- 本工具坚守隐私第一原则。服务端不建立任何与用户 IP 或个人身份绑定的诊断日志与持久化查询追踪。
- 用户界面中的“历史诊断记录”完全存放于用户本地浏览器的
localStorage中,随时可通过点击“清空历史”彻底销毁。
- 免责与非担保声明:
- 本系统提供的检测结果基于边缘探测节点、公开权威数据集及公共 DoH 递归解析得出,仅供网络技术排错、学术研究及网站可达性自查参考。
- 实际网络连通状况可能会受到用户本地运营商(ISP)、地域策略、本地 DNS 劫持及物理线路波动的影响,NetPulse 不对检测结果的绝对时效性与准确性承担连带担保责任。
- 完整协议与条款:
📄 开源协议与致谢
本项目采用 ISC License 许可证开源。
开源致谢与数据来源
- Citizen Lab / test-lists - 全球网络审查测试域名列表
- gfwlist - 社区维护的阻断域名与规则列表
- Cloudflare 1.1.1.1 DNS over HTTPS - 快速安全的 DoH 解析服务
- GFW-DNS-Poisoning 研究报告 - 常见 DNS 污染假 IP 模式参考
Made with ⚡ by NetPulse Team.
