Skip to content
haoze-evollulingPublic

About

No description, website, or topics provided.

Resources

Stars

90 stars

Watchers

1 watching

Forks

Repository files navigation

谛听 (DITING)

谛听(DITING)是一款本地优先的开源 DNS 加速与网络流量过滤工具,提供低延迟解析、规则阻断、防追踪与流量管控。全部处理在设备本地闭环完成,不上传远程数据;支持 Android、Windows、Linux 三端,并提供开发者维护工具箱。

  • 📱 Android:纯 Kotlin 极速模式、Go 用户态全隧道模式(gVisor netstack)、局域网独立 DNS 服务。
  • 💻 Windows:特权系统服务 + Wails 桌面 GUI + 局域网 Web 控制台,支持物理网卡双栈 DNS 接管与崩溃自愈。
  • 🐧 Linux:单二进制 diting-service + 内嵌 Web 控制台,systemd 托管,自动适配多种 DNS 后端。
  • 🧰 维护工具箱:Python + PyWebView 桌面套件,涵盖压测、代码扫描、Logo 导出、截图、跨端构建与版本同步。

核心特性

📡 DNS 解析与调度

  • 多协议:UDP/TCP 53、DNS-over-HTTPS(DoH)、DNS-over-TLS(DoT)。
  • 四种调度:单一服务(Single)、智能优选(Smart EWMA)、最快响应(Fastest 并发竞速)、依次尝试(Sequential 备援)。
  • 服务商管理:内置阿里、腾讯、Cloudflare、Google、DNSPod 等,支持自定义节点。
  • Bootstrap 与防绕过:内置/自定义 Bootstrap IP 解析加密上游域名;启用 DDR 拦截 _dns.resolver.arpa,防止绕过本地通道。

⚡ 缓存与容灾

  • 分片 LRU 缓存:64 分片并发安全缓存,支持跟随 TTL、平衡、高命中等多档策略。
  • 乐观容灾:上游超时或抖动时,在宽限期内复用过期缓存(Stale-While-Revalidate)。
  • 并发合并:Singleflight 合并同一域名的并发请求,降低上游负载并防止缓存击穿。

🛡️ 规则引擎与地址覆写

  • 多维度匹配:域名黑白名单,兼容 AdGuard 语法、通配符与正则;Trie 前缀树 + Bloom 过滤器加速,支持网页元素隐藏(Cosmetic)规则。
  • 规则订阅:AdGuard 格式远程订阅,支持分组、镜像源加速与后台定时更新。
  • 静态覆写:A/AAAA 记录静态地址覆写与 CNAME 重定向解析。
  • 阻断响应:支持零地址(0.0.0.0 / ::)、NXDOMAIN、NODATA、REFUSED 四种行为。

📱 Android 专属

  • 应用分流:排除应用(Bypass 直连)、禁止联网、应用白名单。
  • 可选 HTTPS 检查:基于 gVisor netstack 与本地 CA,仅对勾选应用解密和 URL 级过滤;支持证书绑定旁路与 QUIC/H3 回退。
  • 出站代理:本地 SOCKS5(含 UDP ASSOCIATE)或 HTTP CONNECT。
  • 洞察与诊断:悬浮窗/状态栏网速、按 UID 流量排行、Ping/Traceroute/DNS 诊断、快捷设置磁贴。
  • 个性化:Material 3 动态取色、深浅主题、配置导入导出;可选 BYOK LLM 助手(默认关闭)。

💻 Windows 专属

  • 双二进制架构:diting-service.exe(管理员权限)负责网络核心,diting-gui.exe(免 UAC)负责交互,经本地 IPC 通信。
  • 双栈接管与自愈:自动接管活动物理网卡 IPv4/IPv6 DNS,接管前原子备份,退出或异常时自动恢复,支持应急脱困。
  • 端口冲突检测:启动前探测 53 端口占用,定位进程名与 PID。
  • 局域网 DNS 服务:监听 0.0.0.0:53 与 [::]:53,一键放行 Windows 防火墙 UDP/TCP 入站。
  • 局域网 Web 控制台:默认 15353 端口,管理员鉴权、Session/Token 与防火墙放行,支持浏览器远程管理。
  • 系统集成:Windows 服务注册与管理、开机静默启动、界面截图。

🐧 Linux 专属

  • 单二进制交付:diting-service 内嵌 Vue 3 控制台;systemd 托管,开机自启、异常重启。
  • 多后端接管:自动适配 systemd-resolved(resolvectl)→ NetworkManager(nmcli)→ /etc/resolv.conf,接管前快照、退出还原、崩溃自愈,并生成离线 restore-dns.sh。
  • stub 冲突处置:识别 127.0.0.53:53 / 127.0.0.54:53 占用,可写入 DNSStubListener=no drop-in 并重启服务。
  • 防火墙适配:探测 firewalld / ufw / nftables / iptables 并维护放行规则;无防火墙管理器时降级为诊断提示。
  • FHS 目录:配置在 /etc/diting、数据在 /var/lib/diting,支持 DITING_DATA_DIR 整体覆盖。
  • Web 控制台:内嵌仪表盘默认 15353 端口,支持管理员鉴权与全功能远程配置。

🧰 维护工具箱

  • 基于 Python + PyWebView + WebView2,双击 maintenance/run_maintenance.bat 即可启动。
  • 六大工坊:DNS 诊断压测、代码规模扫描、品牌 Logo 导出、跨端构建打包、统一版本管理、界面自动截图。

平台支持矩阵

平台 模式 最低要求 说明
Android ⚡ 极速模式 Android 7.0+ / arm64-v8a 纯 Kotlin 窄路由,仅接管 DNS(53 端口),轻量省电
Android 🛡️ 普通模式 Android 10.0+ / arm64-v8a gVisor 全隧道,支持应用分流、HTTPS 检查、出站代理
Android 🏠 服务器模式 Android 10.0+ Go 独立 DNS 服务,监听 0.0.0.0:1053,共享给局域网设备
Android(Flutter 重写) 三模式 同左 复用同一 Go 引擎(tunnel.aar),读 1.4.3 的配置与数据库;部分页面数据仍为演示
Windows ⚙️ 特权核心服务 Windows 10+ 64-bit 双栈接管物理网卡、本地 53 监听、缓存规则、局域网 DNS、崩溃自愈
Windows 🖥️ 桌面 GUI Windows 10+ 64-bit + WebView2 Wails v2 + Vue 3,免管理员权限管理服务与实时日志
Windows 🌐 Web 控制台 任意主流浏览器 访问 15353 端口远程管理 Windows 核心服务
Linux ⚙️ 核心服务 systemd 发行版 / amd64·arm64 多后端 DNS 接管、53 监听、缓存规则、局域网 DNS、离线还原
Linux 🌐 Web 控制台 任意主流浏览器 访问 15353 端口完成全部配置,无需桌面环境

工程结构

DITING/
├── Android/                  # Android 客户端(app + tunnel,构建为 tunnel.aar)
├── DITING_flutter/           # Android 客户端的 Flutter 重写(兼容 1.4.3 的配置与数据库)
│   ├── lib/ui/               #   移植自 1.4.3 的设计系统(GPL-3.0)
│   ├── lib/data/             #   旧版 SharedPreferences(11 个容器)与旧版 SQLite 读写
│   ├── lib/pages/            #   页面(85 条路由)
│   └── android/              #   Flutter Android 壳(包名 com.haoze.diting)
├── Desktop/                  # Windows / Linux 工程
│   ├── cmd/service/          # 特权核心服务(Windows Service / Linux systemd)
│   ├── internal/             # DNS 内核、平台适配、IPC、鉴权、查询日志
│   ├── frontend/             # Vue 3 + TypeScript + Material Web 前端
│   ├── build/                # 构建产物、NSIS 与 systemd 打包脚本
│   ├── main.go               # Wails 桌面 GUI 入口
│   └── build*.bat/sh         # 构建、打包与版本同步脚本
├── maintenance/              # Python + PyWebView 维护工具箱
├── docs/                     # 开发文档、历史归档与静态资源
├── avatars/                  # 赞助者与共建者头像
├── recognition_members.json  # 赞助者与共建者名单
├── AGENTS.md                 # 开发与代码规范
└── README.md

构建指南

📱 Android(Flutter 重写)

要求 Flutter 3.47+、JDK 11+、Android SDK;产物架构为 arm64-v8a。

cd DITING_flutter
flutter pub get
flutter analyze lib test
flutter test
flutter build apk --debug

模拟器(x86_64)联调需多 ABI 的 AAR:flutter build apk --debug -PtunnelAar=libs/tunnel-debug.aar (该文件不入库),否则 libgojni.so 只有 arm64-v8a,System.loadLibrary 会失败。 详情见 DITING_flutter/README.md 与 Go AAR 构建记录。

📱 Android(Kotlin 1.4.3 基线)

cd Android
./gradlew :app:assembleDebug --console=plain    # Windows 使用 gradlew.bat
./gradlew :app:assembleRelease --console=plain

亦可运行 Android/build_apk.bat:交互式选择编译模式、自动归档,并支持 ADB(含无线调试)部署真机。

产物:Android/app/build/outputs/apk/<buildType>/。

💻 Windows

要求 Go 1.25+、Node.js 18+、Wails v2(go install github.com/wailsapp/wails/v2/cmd/wails@latest);打包独立安装包需 NSIS(可选)。

cd Desktop
build.bat

一键构建 Windows EXE 安装包,纯净产物输出至 Desktop/build/bin/DITING-release-v*.exe。构建脚本会自动注入版本、提交与构建时间,手动编译仅用于调试。

需要自定义目标或双平台打包时:python ..\maintenance\core\build_manager.py -t both -b release。

手动编译二进制
cd Desktop

REM 编译特权服务
go build -ldflags "-s -w -H windowsgui" -o build/bin/diting-service.exe ./cmd/service

REM 编译 GUI
wails build -platform windows/amd64 -o diting-gui.exe

🐧 Linux

要求 Go 1.25+;生成 .deb 需 dpkg-deb(可选)。

cd Desktop
./build_linux.sh --package            # 当前架构
./build_linux.sh -a arm64 --package   # 指定 amd64 / arm64 / arm

在 Windows 上可通过 build_deb.bat 打包:Windows 本机 Go 交叉编译 Linux 二进制,WSL 仅用 dpkg-deb 组装,无需在 WSL 内安装 Go。产物为 Desktop/build/bin/ 下的 .deb 或单二进制。

安装为 systemd 服务:

cd Desktop/build/linux
sudo ./install.sh --bin ../../build/bin/diting-service
systemctl status diting-dnsservice

管理地址:http://127.0.0.1:15353。卸载:sudo ./uninstall.sh(保留配置),加 --purge 一并清理。

WSL 调试时 53 端口可能被 systemd-resolved stub 占用,建议用 DITING_DATA_DIR 重定向数据并以非特权端口验证,详见 Linux 移植说明。

手动交叉编译
cd Desktop
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build \
  -trimpath -ldflags "-s -w" \
  -o build/bin/diting-service ./cmd/service

🧰 维护工具箱

要求 Python 3.8+。首次运行可执行:

python -m pip install -r maintenance/requirements.txt
python maintenance/app.py

也可直接双击 maintenance/run_maintenance.bat:脚本会检测缺失依赖并自动安装,异常退出时保留窗口以便查看报错。发布新版本时,用工具箱的「统一版本管理」,或执行:

REM 同步到目标版本(示例)
.\Desktop\set_version.bat 1.4.3

技术栈

  • Android(Kotlin 基线 1.4.3):Kotlin / Jetpack Compose / Material 3 / Coroutines & Flow / Room / DataStore / VpnService / OkHttp / WorkManager
  • Android(Flutter 重写):Flutter / Dart 3 / Riverpod / go_router / sqflite(直接打开 1.4.3 的库)/ 移植的 Material 3 设计系统
  • Windows:Go 1.25+ / Wails v2 / Vue 3 / TypeScript / Vite / Material Web / Win32 API / Windows Service
  • Linux:Go 1.25+ / systemd / resolvectl / nmcli / netlink / Vue 3 内嵌控制台
  • DNS 引擎:Go / gVisor netstack / miekg/dns / quic-go / Singleflight
  • 维护工具箱:Python 3 / PyWebView (WebView2) / HTML5 / CSS3 / JavaScript

开发文档


赞助支持

如果谛听对您有帮助,欢迎赞助支持项目开发。付款时请备注昵称,以便同步加入赞助者名单。

支付宝付款码 微信付款码
支付宝付款码 微信付款码

名单展示机制与头像提交规范见 云控贡献者名单维护说明。


作者与开源协议

About

No description, website, or topics provided.

Resources

Stars

90 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages