
VPN 分流路由探测器
探测出口 IP · 测量连接延迟 · 验证分流规则
Snaky 是一个 CLI 工具,用于检测当前网络环境下各站点的出口 IP 和连接延迟。它通过 Cloudflare CDN trace、HTTP 响应头等多种探测方式,帮助你验证 VPN/代理的分流规则是否按预期工作。内置 58 个常用站点端点,支持分层(tier)按需加载,实时 TUI 逐条渲染探测结果。
┌─────────┐ ┌──────────┐ ┌──────────────┐
│ snaky │────▶│ probes │────▶│ CF trace │
│ CLI │ │ engine │────▶│ HTTP header │
└─────────┘ └──────────┘────▶│ HTTP ping │
│ └──────────────┘
▼
┌──────────┐
│ Live │
│ TUI │
└──────────┘
- cftrace — 通过 Cloudflare
/cdn-cgi/trace 获取出口 IP、地理位置、PoP 节点
- http-header — 从 HTTP 响应头(如
x-real-ip)提取出口 IP
- http-ping — 多轮 HTTP 延迟测量,取中位数,自动预热
- 逐条渲染 — 基于 Ink(React for CLI),每完成一个探测立刻显示结果
- 延迟着色 — ≤200ms 绿色、201-1000ms 黄色、>1000ms 红色
- 状态图标 — ✓ 成功 / ✗ 失败,一目了然
- 非 TTY 降级 — 管道/脚本场景自动切换为静态表格输出
- 并发控制 — 可配置并发数,探测与 ping 并行执行
- 重试与回退 — 指数退避重试,支持 fallback 域名(主域一次机会,备域享有完整重试预算)
- 超时控制 — 每个请求独立超时,AbortSignal 精确终止
- 端点分层 — tier 1 核心端点默认运行,tier 2 扩展端点按需加载
- 内置端点 — 预配置 58 个常用站点(AI、社交、开发工具、加密货币等)
- 用户自定义 — 添加/删除/启用/禁用端点,支持覆盖内置
- 分类筛选 — 按 category 或 tier 过滤探测目标
- JSON — 结构化输出,适合脚本消费和 Swift Decodable 解析
- 彩色表格 — 终端友好的人类可读格式,支持
--no-color
npm install -g @nocoo/snaky
| 命令 |
说明 |
snaky |
运行全部:connect + split + dns |
snaky connect |
连接延迟测试 |
snaky split [name...] |
分流探测(出口 IP 检测) |
snaky dns |
DNS 泄漏检测 |
snaky list |
列出所有端点 |
snaky add <name> <domain> |
添加 cftrace 端点 |
snaky remove <name> |
删除端点 |
snaky disable <name> |
禁用端点 |
snaky enable <name> |
启用端点 |
snaky config path |
输出配置文件路径 |
snaky config show |
输出当前生效配置 |
snaky config init |
创建配置文件 |
| 选项 |
说明 |
--json |
JSON 格式输出 |
--tier <n> |
端点层级(1=核心,2=扩展,默认 1) |
--timeout <ms> |
单次请求超时(默认 5000) |
--concurrency <n> |
最大并发数(默认 10) |
--category <cat> |
按分类过滤 |
--config <path> |
自定义配置文件 |
--no-color |
禁用彩色输出 |
snaky/
├── packages/cli/ # CLI 主包 (@nocoo/snaky)
│ ├── src/
│ │ ├── cli.ts # 入口,命令调度
│ │ ├── cli/ # 参数解析、退出码
│ │ ├── config/ # 配置加载、校验、变更
│ │ ├── parsers/ # cftrace / header 响应解析
│ │ ├── probes/ # 探测执行(cftrace, header, ping)
│ │ ├── runner/ # 并发编排、多轮 ping
│ │ └── output/ # JSON / 表格 / 实时 TUI
│ └── tests/ # 单元测试 + 端到端测试
├── scripts/ # 版本管理、发布脚本
└── apps/macos/ # macOS 菜单栏应用(规划中)
环境要求:Node.js ≥ 20, pnpm ≥ 9
pnpm install # 安装依赖
pnpm build # 构建 CLI
pnpm dev # 监听模式构建
| 命令 |
说明 |
pnpm test |
运行单元测试 |
pnpm test:coverage |
覆盖率报告(≥95% line, ≥90% branch) |
pnpm test:e2e |
端到端测试 |
pnpm lint |
Biome 代码检查 |
pnpm typecheck |
TypeScript 类型检查 |
| 层 |
内容 |
触发时机 |
| L1 单元测试 |
解析器、配置、探测逻辑 (260 tests) |
pre-commit |
| L2 端到端 |
二进制调用、JSON 输出、退出码 (14 tests) |
pre-push |
| G1 静态检查 |
tsc --noEmit + biome check |
pre-commit |
MIT © 2026