Skip to content

coolapijust/SniViewer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SNI Viewer

DNS 污染检测与域前置诊断工具,支持 ECH 检测与连通性分析

功能特性

  • DNS 污染检测:对比系统 DNS 与 DOH 解析结果,识别 ASN 不匹配等污染特征
  • 域前置检测:测试直连与域前置可用性,检测网络阻断与 SNI 过滤
  • IP 归属分析:查询 IP 的 ASN 信息,识别所属组织与 CDN 服务商
  • ECH 支持:自动识别 Cloudflare 与 Meta 域名,提示 ECH 加密连接支持
  • 连通性测试:Ping 与 TCP 端口测试,检测 IP 是否被网络阻断
  • 诊断历史:本地保存诊断记录,方便回顾与对比
  • 实时进度:诊断过程实时显示各阶段状态

项目结构

SNIViewer/
├── core/                          # 核心诊断引擎
│   ├── config/                    # 配置管理
│   ├── dns/                       # DNS 解析模块
│   ├── network/                   # 网络测试模块
│   ├── asn/                       # ASN 查询模块
│   ├── fronting/                  # 域前置检测模块
│   ├── diagnose/                  # 诊断流程编排
│   └── logger/                    # 日志系统
│
├── gui/                           # GUI 层
│   ├── app.go                     # Wails 应用
│   ├── handlers.go                # 前端调用接口
│   └── frontend/                  # 前端资源
│       ├── index.html             # 主页面
│       └── src/
│           ├── main.js            # 前端逻辑
│           └── styles.css         # 样式
│
├── data/                          # 数据目录
│   └── GeoLite2-ASN.mmdb         # ASN 数据库(嵌入到可执行文件)
│
├── main.go                        # 程序入口
├── wails.json                     # Wails 配置
└── README.md

快速开始

构建应用

cd SNIViewer
wails build

构建完成后,可执行文件位于 build/bin/SNIViewer.exe

运行应用

# Windows
SNIViewer.exe

使用说明

添加 DOH 服务器

  1. 进入"测试"页面
  2. 在 DOH 配置区域输入完整的 DOH URL
  3. 点击"添加"按钮
  4. DOH URL 必须以 https:// 开头

示例:

  • https://cloudflare-dns.com/dns-query
  • https://dns.google/dns-query

开始诊断

  1. 输入要诊断的域名
  2. 从下拉框选择 DOH 服务器
  3. (可选)填写自定义 SNI,留空则使用空 SNI 测试域前置
  4. 点击"开始诊断"
  5. 观察实时诊断进度
  6. 查看诊断结果

诊断结果说明

DNS 解析结果

  • 系统 DNS:本机配置的 DNS 服务器解析结果
  • DOH:可信 DOH 服务器的解析结果
  • 污染检测:对比两个结果的 ASN,判断是否存在 DNS 污染

IP 归属分析

  • IP:解析出的 IP 地址
  • ASN:自治系统号
  • 组织:所属组织机构
  • CDN:识别的 CDN 服务商
  • 来源:DNS 来源(system/doh)

连接测试

  • 直连可用:使用正确 IP 和域名 SNI 可直接连接,建议修改 hosts
  • 域前置可用:使用空 SNI 或自定义 SNI 可连接
  • ECH 支持:Cloudflare 或 Meta 域名,支持 ECH 加密连接
  • 连接失败:直连和域前置均失败

状态说明

状态 含义
正常 未检测到 DNS 污染,网络连通正常
检测到污染 系统 DNS 与 DOH 返回的 IP 属于不同 ASN
错误 DNS 解析失败或网络阻断

诊断流程

┌─────────────────────────────────────────────────────────┐
│                     诊断流程                             │
├─────────────────────────────────────────────────────────┤
│  1. DNS 解析                                            │
│     ├── 系统 DNS 查询                                   │
│     └── DOH 查询                                        │
├─────────────────────────────────────────────────────────┤
│  2. 污染检测                                            │
│     └── 对比系统 DNS 与 DOH 的 ASN                      │
├─────────────────────────────────────────────────────────┤
│  3. IP 归属分析                                         │
│     └── MMDB 数据库查询 ASN 信息                        │
├─────────────────────────────────────────────────────────┤
│  4. 连通性测试                                          │
│     ├── Ping 测试(TCP 方式)                           │
│     └── TCPing 测试(端口 443)                         │
├─────────────────────────────────────────────────────────┤
│  5. 连接测试                                            │
│     ├── 检查是否为 Cloudflare/Meta(ECH 支持)          │
│     ├── 尝试直连(正确 IP + 正确 SNI)                  │
│     └── 尝试域前置(正确 IP + 空/自定义 SNI)           │
└─────────────────────────────────────────────────────────┘

ECH 支持说明

ECH(Encrypted Client Hello)是一种 TLS 扩展,可以加密 TLS 握手中的 SNI 信息。

支持的 CDN:

  • Cloudflare
  • Meta

当检测到 DOH 返回的 IP 属于以上 CDN 时,会显示 ECH 支持提示,不再进行域前置测试。

域前置检测原理

域前置是一种绕过 SNI 过滤的技术:

  1. 直连测试:使用正确的域名作为 SNI

    • 如果成功:说明可以直接连接,建议修改 hosts
    • 如果失败:可能是 SNI 被过滤
  2. 域前置测试:使用空 SNI 或自定义 SNI

    • 如果成功:说明服务器支持域前置
    • 如果失败:说明服务器不支持域前置

配置文件

配置保存在 config.json

{
  "version": "1.0",
  "doh_servers": [
    "https://your-doh-server.com/dns-query"
  ],
  "network": {
    "ping_timeout": 5000,
    "ping_retry": 3,
    "tcp_timeout": 5000,
    "tcp_retry": 3
  }
}

技术栈

  • GUI 框架:Wails v2(Go + WebView2)
  • ASN 数据库:MaxMind GeoLite2-ASN.mmdb(嵌入可执行文件)
  • DNS 解析:支持 DNS wire format(RFC 8484)
  • 前端:原生 HTML/CSS/JavaScript

注意事项

  1. ASN 数据库:已嵌入到可执行文件中,无需单独下载;可自行更新从MaxMind下载的最新数据库文件替换并自行编译
  2. 网络环境:某些网络环境可能禁止 ICMP,导致 Ping 失败
  3. 域前置:并非所有 CDN 都支持域前置,测试结果仅供参考
  4. ECH:目前仅 Cloudflare 和 Meta 支持 ECH
  5. 污染测试准确性:目前仅对照两个 DNS 返回IP的 ASN,对于多CDN网站场景可能不完全准确,但参考价值足够
  6. 上游Doh:必须是无污染可信任的DoH服务,否则测试结果不可靠

故障排除

DOH 请求失败

  • 检查 DOH URL 是否正确
  • 确认网络可以访问 DOH 服务器
  • 查看控制台日志了解详细错误

连接测试全部失败

  • 可能是目标服务器不支持域前置
  • 可能是网络完全阻断
  • 尝试更换域名测试

许可证

MIT License

About

快速探测目标网站的可访问性和阻断类型,可根据结果配置SniShaper规则

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors