谛听(DITING)是一款本地优先的开源 DNS 加速与网络流量过滤工具,提供低延迟解析、规则阻断、防追踪与流量管控。全部处理在设备本地闭环完成,不上传远程数据;支持 Android、Windows、Linux 三端,并提供开发者维护工具箱。
- 📱 Android:两个工程同仓共存 ——
DITING-Flutter(新版主力,Flutter 架构,持续开发)与DITING-Legacy(旧版 Kotlin 1.4.3 基线,已停止维护,仅作新版实现参考)。均支持极速模式、Go 用户态全隧道模式(gVisor netstack)与局域网独立 DNS 服务。 - 💻 Windows:特权系统服务 + Wails 桌面 GUI + 局域网 Web 控制台,支持物理网卡双栈 DNS 接管与崩溃自愈。
- 🐧 Linux:单二进制
diting-service+ 内嵌 Web 控制台,systemd 托管,自动适配多种 DNS 后端。 - 🧰 维护工具箱:Python + PyWebView 桌面套件,涵盖压测、代码扫描、Logo 导出、截图、跨端构建与版本同步。
- 多协议: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 四种行为。
- 应用分流:排除应用(Bypass 直连)、禁止联网、应用白名单。
- 可选 HTTPS 检查:基于 gVisor netstack 与本地 CA,仅对勾选应用解密和 URL 级过滤;支持证书绑定旁路与 QUIC/H3 回退。
- 出站代理:本地 SOCKS5(含 UDP ASSOCIATE)或 HTTP CONNECT。
- 洞察与诊断:悬浮窗/状态栏网速、按 UID 流量排行、Ping/Traceroute/DNS 诊断、快捷设置磁贴。
- 个性化:Material 3 动态取色、深浅主题、配置导入导出;可选 BYOK LLM 助手(默认关闭)。
- 双二进制架构:
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 服务注册与管理、开机静默启动、界面截图。
- 单二进制交付:
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=nodrop-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(DITING-Legacy,已停维护) |
⚡ 极速模式 | Android 7.0+ / arm64-v8a |
纯 Kotlin 窄路由,仅接管 DNS(53 端口),轻量省电 |
Android(DITING-Legacy,已停维护) |
🛡️ 普通模式 | Android 10.0+ / arm64-v8a |
gVisor 全隧道,支持应用分流、HTTPS 检查、出站代理 |
Android(DITING-Legacy,已停维护) |
🏠 服务器模式 | Android 10.0+ | Go 独立 DNS 服务,监听 0.0.0.0:1053,共享给局域网设备 |
Android(DITING-Flutter,主力) |
三模式 | 同左 | Flutter 重写,自带 Go 引擎源码(tunnel/,按架构编译为 tunnel-arm64/x64/all.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/
├── DITING-Flutter/ # ★ 新版 Android 客户端(Flutter 架构,主力开发,兼容 1.4.3 的配置与数据库)
│ ├── lib/ui/ # 移植自 1.4.3 的设计系统(GPL-3.0)
│ ├── lib/data/ # 旧版 SharedPreferences(11 个容器)与旧版 SQLite 读写
│ ├── lib/pages/ # 页面(85 条路由)
│ ├── tunnel/ # Go 用户态隧道引擎源码(gomobile 编译为 arm64/x64/all 三种 AAR)
│ └── android/ # Flutter Android 壳(包名 com.haoze.diting)
├── DITING-Legacy/ # 旧版 Android 客户端(Kotlin 1.4.3 基线,已停止维护,仅供新版对照实现)
│ └── app/ # Kotlin / Jetpack Compose 应用(依赖冻结副本 app/libs/tunnel.aar)
├── 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 工程曾用名为
DITING_flutter/(现DITING-Flutter/)与Android/(现DITING-Legacy/)。 旧版已停止维护,新功能一律进DITING-Flutter;但新版在更新时仍会对照旧版实现(源码注释中的DITING-Legacy/...指针即为此用),因此旧版工程保留在仓库内,不删除。docs/development/Archive/下的历史文档保留当年的旧路径,属归档记录,不再同步。引擎迁移说明(2026-10):Go 隧道引擎源码已从
DITING-Legacy/tunnel迁至DITING-Flutter/tunnel, 新版工程自含引擎源码与 AAR 构建入口(tunnel/build_aar.ps1),不再依赖旧版目录结构; 旧版工程改用冻结副本app/libs/tunnel.aar构建,其余源码原样保留。
要求 Flutter 3.47+、JDK 11+、Android SDK;Release 产物架构为 arm64-v8a。
cd DITING-Flutter
flutter pub get
flutter analyze lib test
flutter test日常打包运行 DITING-Flutter/build_apk.bat,交互式选择编译档位并自动归档:
| 档位 | 编译模式 | 签名 | Flutter 库架构 | 隧道引擎架构 | 可安装的设备 |
|---|---|---|---|---|---|
| 1 | Debug | Debug Key | arm64-v8a+x86_64 |
双 ABI 一体 | ARM 手机/平板 与 x86_64 模拟器 |
| 2 | Debug | Release Key | arm64-v8a+x86_64 |
双 ABI 一体 | 同上(可覆盖安装正式包) |
| 3 | Release | Release Key | arm64-v8a |
仅 arm64 | ARM 手机/平板(默认档位) |
| 4 | Release | Release Key | x86_64 |
仅 x86_64 | 仅 x86_64 模拟器 |
| 5 | — | — | — | — | 清理编译缓存与构建产物(flutter clean + gradlew clean) |
架构匹配注意:3 档打的是 arm64 引擎(tunnel-arm64.aar,入库),4 档打的是 x86_64 引擎
(tunnel-x64.aar),1/2 档 debug 打的是双 ABI 一体引擎(tunnel-all.aar,真机与模拟器同包
通用)。tunnel-x64.aar / tunnel-all.aar 均按需由 tunnel/build_aar.ps1 -Arch x64|all
生成且不入库,build.gradle.kts 按 -PditingAbi / --target-platform 自动选用,缺文件时
构建报错并提示。把 3/4 档的包装到不匹配的设备上会报「安装失败 / 安装包与系统不兼容」。
另外所有 debug 构建共用同一输出文件 app-debug.apk,磁盘上的产物永远是最后一次构建的
结果——装设备前先看构建日志里的 Tunnel engine ABI 行确认。
为缩小安装包体积,Release 档位以 -PditingAbi=<abi> 构建单架构包,并通过
-PditingCompressNativeLibs=true(默认)对 .so 使用 legacy 打包(安装时解压)。
详情见 DITING-Flutter/README.md 与
Go AAR 构建记录。
cd DITING-Legacy
./gradlew :app:assembleDebug --console=plain # Windows 使用 gradlew.bat
./gradlew :app:assembleRelease --console=plain亦可运行 DITING-Legacy/build_apk.bat:交互式选择编译模式、自动归档,并支持 ADB(含无线调试)部署真机。
产物:DITING-Legacy/app/build/outputs/apk/<buildType>/。
要求 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要求 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:脚本会检测缺失依赖并自动安装,异常退出时保留窗口以便查看报错。
版本号维护在工具箱的「版本号维护」页完成:Flutter 主力客户端(DITING-Flutter/pubspec.yaml)是常用入口;桌面端 / Wails / NSIS / 旧版 Android 的版本号维护已折叠归档,仅在需要时展开。命令行等价用法:
REM 同步 Flutter 客户端版本(构建号自动按 major*10000+minor*100+patch 推导,只增不减)
python maintenance/core/version_manager.py 2.0.2 -g flutter
REM 同步桌面端等其余模块(示例)
.\Desktop\set_version.bat 1.4.3 -g common -g legacy- Android(
DITING-Legacy,旧版 Kotlin 基线 1.4.3,已停维护):Kotlin / Jetpack Compose / Material 3 / Coroutines & Flow / Room / DataStore / VpnService / OkHttp / WorkManager - Android(
DITING-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
- DITING Flutter 客户端(
DITING-Flutter,新版主力) — 许可与来源、构建与签名、架构约定、旧版数据兼容契约、原生通道、统计口径与已知边界(该工程唯一文档)。 - Windows DNS 内核架构与开发规划 — 双进程架构、网卡接管与恢复状态机、IPC 与 Pipeline 设计。
- Linux 移植说明 — 平台差异、DNS 接管后端、
DITING_DATA_DIR调试与功能差异。 - Go AAR 构建记录 — Android
tunnel.aar的编译环境、参数与交叉编译细节。 - 云控贡献者名单维护 — 名单云控机制、JSON 规范与头像维护。
- 历史设计归档见
docs/development/Archive/。
如果谛听对您有帮助,欢迎赞助支持项目开发。付款时请备注昵称,以便同步加入赞助者名单。
| 支付宝付款码 | 微信付款码 |
|---|---|
![]() |
![]() |
名单展示机制与头像提交规范见 云控贡献者名单维护说明。

