GoodbyeDPI 快速入门:在 Windows 上绕过 DPI 审查(附源码导览)
【免费下载链接】GoodbyeDPIGoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI
如果你所在的网络环境里,某些网站会"莫名其妙打不开",那很可能是运营商的 DPI(深度包检测)在拦截流量。GoodbyeDPI 就是一个专门干这件事的开源工具:它能在 Windows 上同时对付"被动 DPI"(冒充目标网站抢先回复)和"主动 DPI"(串在链路上检查内容),通过 TCP 分片、伪造 Host 头、发送假包等 7 种手法让 DPI"看花眼",从而恢复被屏蔽站点的访问。本文带你从拿到代码到读懂入口、跑通第一次运行,全程 15 分钟以内。适合人群:想在 Windows 上解决网站被墙问题的普通用户,以及想看懂它底层原理的开发者。
三分钟拿到代码并跑起来
先说结论:GoodbyeDPI 只能运行在 Windows 7/8/8.1/10/11 上,且需要管理员权限,它的核心依赖是 WinDivert 驱动(负责把网络包截下来交给用户态处理)。
第一步,获取代码(最短路径):
git clone https://gitcode.com/GitHub_Trending/go/GoodbyeDPI第二步,编译。项目用 GNU Make + MinGW 构建,仓库里的 src/Makefile 已经把所有工作都写好了,你只需把 WinDivert 的 include 和库路径指给它:
cd src make BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64(32 位系统把BIT64=1去掉、库路径换成 x86 即可。)编译成功后会在src/下得到goodbyedpi.exe。
第三步,首次运行。以管理员身份打开命令行,直接执行:
goodbyedpi.exe这一步完成后你会看到控制台打印GoodbyeDPI v0.2.3rc3: Passive DPI blocker and Active DPI circumvention utility,然后程序就安静地开始工作了——它不带参数启动时默认启用 -9 模式(现代模式集:HTTP/HTTPS 分片 + 伪造包 + QUIC 拦截),窗口开着它就生效,关闭窗口立即退出。这是官方推荐的"先裸跑看看通不通"的方式,如果此时被屏蔽的网站能打开了,恭喜你,可以保持现状;如果需要更精细的定制,往下看。
一分钟看懂仓库怎么组织
整个仓库非常克制,没有花哨的框架,核心代码全部集中在src/目录(两层以内):
GoodbyeDPI/ ├── src/ # 全部源代码 │ ├── goodbyedpi.c # 主程序:抓包、分片、改包、回注,整个"战场" │ ├── dnsredir.c # 把本机 DNS 请求改投到指定地址/端口,防 DNS 投毒 │ ├── ttltrack.c # 监听 SYN/ACK 统计远端 TTL,判断"假包"该发多远 │ ├── blackwhitelist.c # 域名黑白名单,只对列表内站点出手 │ ├── fakepackets.c # 生成各种"假 HTTP/HTTPS 包" │ ├── service.c # 注册为 Windows 服务,开机自启 │ ├── utils/ # 工具函数:字符串替换、getline、uthash 哈希表 │ └── Makefile # 构建脚本,MinGW 交叉编译配置 ├── README.md # 官方文档,用法与原理都在这里 └── LICENSE读代码的建议顺序是:先读 README.md 的 "How does it work" 一节建立直觉,再进src/goodbyedpi.c看实现,遇到不认识的模块名(比如 ttltrack)回来看这张地图对号入座。
看懂入口:程序启动时到底做了什么
真正的主入口是 src/goodbyedpi.c 里的main(),整个文件 1500 多行,但启动阶段的关键动作只有四步:
int main(int argc, char *argv[]) { // 1. 若以 Windows 服务方式启动,注册服务并挂起当前线程 if (service_register(argc, argv)) return 0; // 2. 初始化 WinDivert 过滤器:只抓 80/443 端口的 TCP 包,排除内网 filter_string = strdup(FILTER_STRING_TEMPLATE); // 3. 不带参数 = 默认 -9 模式:分片 + 假包 + 拦截 QUIC if (argc == 1) { do_fragment_http = do_fragment_https = 1; http_fragment_size = https_fragment_size = 2; do_block_quic = 1; // ... 其余标志位 ... } // 4. 用 getopt_long 解析 -p / -f / --blacklist 等全部命令行参数 while ((opt = getopt_long(argc, argv, ...)) != -1) { ... } }换句话说,这个程序没有"配置文件",一切行为都来自命令行参数,main()后半段就是死循环地收包、判断要不要"做手脚"、再回注进网络。
最常改的 4 个参数
GoodbyeDPI 的参数很多(goodbyedpi.exe -h可查看全部),日常真正用得上的是下面这几个:
| 参数 | 作用 | 改成 X 会发生什么 |
|---|---|---|
-9(默认) | 现代模式集,速度最快、兼容性最好 | 换成-1会退回"最兼容模式",老式 DPI 更怕它,但网速更慢 |
--blacklist 文件.txt | 只对列表内域名执行规避 | 改成你的封锁清单后,其他站点流量完全不碰,更安全也省 CPU |
--dns-addr 77.88.8.8 --dns-port 1253 | 把 DNS 请求改投到指定解析器的非标准端口 | 运营商若对 DNS 投毒(把域名解析成垃圾 IP),加上它就能绕过去 |
--max-payload 1200 | 超过此长度的包不再处理 | 调小(如 600)CPU 占用更低,但大文件传输期间的请求可能漏处理 |
一个小提醒:README 里的--set-ttl、--wrong-chksum等"假请求模式"威力大但被明确标注 DANGEROUS,建议新手始终搭配--blacklist使用。
下一步可以试试
- 动手改参数:把你被屏蔽的域名整理成一个 txt,用
--blacklist跑一次,对比裸跑时的控制台输出差异,体会"精准打击"和"全量处理"的区别; - 顺着源码读原理:从
main()的收包循环出发,重点看src/fakepackets.c(假包是怎么伪造的)和src/ttltrack.c(TTL 探测如何决定假包能"走多远"),配合 README 的 "How does it work" 一节,能把 7 种规避手法全部对上号; - 装成服务:参考 README 的 "How to install as Windows Service" 小节,用 src/service.c 支持的注册功能让它开机自启,从此不再需要手动开窗口。如果使用过程中遇到兼容性问题(比如 Killer 网卡、老版 Win7 的驱动签名问题),README 的 "Known issues" 一节已经把常见坑都列出来了,查一下往往比自己摸索快得多。
【免费下载链接】GoodbyeDPIGoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考