GoodbyeDPI 完全上手:Windows 上绕过运营商 DPI 的完整教程
【免费下载链接】GoodbyeDPIGoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI
打开一个网站,出来的不是文章而是一页"访问受限";换成 HTTPS 页面更糟,直接转圈。这多半不是电脑的问题,而是运营商链路上的深度包检测(DPI)设备认出了你的请求。GoodbyeDPI 是一款免费开源的 DPI 规避工具,读完本文你能在 Windows 上把它跑起来,把被拦的页面恢复正常。
Windows 三步快速启动
系统要求:Windows 7 / 8 / 8.1 / 10 / 11,管理员权限。
- 从项目 Releases 页下载压缩包并解压,得到
goodbyedpi.exe和若干.cmd脚本。 - 按地区双击对应脚本:俄罗斯用
1_russia_blacklist_dnsredir.cmd,其他国家用2_any_country_dnsredir.cmd。 - 保持控制台窗口开着,打开一个之前被拦的网站,能打开就算成功。
💡 如果裸跑goodbyedpi.exe无效、而开启安全 DNS(DoH)后域名解析正常,说明你的运营商会拦截 DNS 请求。此时加--dns-addr把查询改道到非标准端口的公共解析器,官方示例是 Yandex DNS77.88.8.8:1253。实现见 src/dnsredir.c。
原理白话:GoodbyeDPI 对付的两种 DPI
程序启动时加载 WinDivert 内核驱动,通过 Windows 过滤平台(WFP)在网卡数据流上设过滤器,把数据包引到用户态处理。控制台窗口开着就在跑,关窗即停,总调度逻辑在 src/goodbyedpi.c。
被动 DPI:抢答的假窗口
被动 DPI 旁路接入(光分路器或端口镜像),不改你的数据,但响应比真网站还快:你走 HTTP,它先回一个 HTTP 302 把你拐到审查页;你走 HTTPS,它直接发 TCP Reset 掐断连接。这些假包有个规律——IP 头的 Identification 字段通常是固定的0x0000或0x0001(俄罗斯运营商实测)。GoodbyeDPI 按这个指纹把假包丢弃,真实网站的 IP ID 是变化的,不受影响。
主动 DPI:会开箱的"海关"
主动 DPI 串在链路中间,能改包、能分类内容,更难糊弄。对付它,GoodbyeDPI 对请求做 7 种"合规变形"——全部符合 TCP 与 HTTP 标准,网站照常工作,分类器却解析不出内容。下一节逐一说明。
7 种让主动 DPI 分类失败的合规变形
| # | 变形手段 |
|---|---|
| 1 | 第一个数据包做 TCP 级分片 |
| 2 | keep-alive 持久会话分片 |
| 3 | 把Host头名替换为hoSt |
| 4 | 去掉Host:与值之间的空格 |
| 5 | 在方法与 URI 之间加额外空格 |
| 6 | 随机混合 Host 值大小写(test.com→tEsT.cOm) |
| 7 | 发送 TTL/校验和/序列号不正确的假包 |
假包的关键是"骗得过大、到不了真服务器"。--auto-ttl会先记录真实服务器 SYN/ACK 的 TTL,算出你与服务器之间的跳数,再发出一个"差一跳就过期"的假包,TTL 追踪逻辑在 src/ttltrack.c;--wrong-chksum发校验和错误的包,--wrong-seq发序列号落在过去的包,两者都会被对端按协议丢弃。生成逻辑见 src/fakepackets.c。
常用参数表与默认怎么选
常用参数如下:
| 参数 | 取值 | 作用 |
|---|---|---|
-p | — | 拦截被动 DPI(丢弃假 302/Reset) |
-q | — | 拦截 QUIC/HTTP3 流量 |
-r/-s/-m | — | Host 头变形三件套:改hoSt/ 去空格 / 混大小写 |
-f <值> | 整数 | HTTP 首个包的分片大小 |
-e <值> | 整数 | HTTPS 首个包的分片大小 |
-k <值> | 整数 | 启用 keep-alive 会话分片并设大小 |
-n | — | 配合-k,不等首个分片的 ACK |
-a | — | 方法与 URI 间加额外空格,⚠️ 可能弄坏个别网站 |
--blacklist <txt> | 文件 | 只对列表内域名规避,可多次指定 |
--dns-addr/--dns-port | IP / 端口 | 把 DNS 查询改道到指定地址和端口 |
--ip-id <值> | 十进制 | 追加要拦截的 IP ID 指纹,可多次指定 |
--max-payload [值] | 默认 1200 | 跳过超大载荷的包,降低 CPU 占用 |
--auto-ttl [a1-a2-m] | 默认1-4-10 | 假包模式:自动探测 TTL 并按距离衰减 |
--wrong-seq/--wrong-chksum | — | 发序列号/校验和错误的假包 |
--reverse-frag | — | 分片倒序发送,兼容处理不了分段 ClientHello 的网站 |
默认怎么选:不传任何参数即可,等价于默认模式-9;只知道少量被拦域名时,加--blacklist 域名列表.txt限制处理范围,黑白名单逻辑见 src/blackwhitelist.c。
模式集:-1 到 -9 怎么选
参数打包成的模式集如下:
| 模式 | 实际组成 | 定位 |
|---|---|---|
-1 | -p -r -s -f 2 -k 2 -n -e 2 | 兼容性最好的传统模式 |
-2 | 同-1,HTTPS 分片加大到 40 | HTTPS 速度更好的传统模式 |
-3 | -p -r -s -e 40 | HTTP/HTTPS 都偏速度 |
-4 | -p -r -s | 传统模式里最快 |
-5~-8 | 分片 + 假包(自动 TTL / 错误序列号 / 错误校验和)的各种组合 | 更稳更快的现代模式集 |
-9 | -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload -q | 默认模式 |
怎么挑:不传参数(即-9)或直接跑官方.cmd脚本;只有-9无效时,再按-1→-5~-8逐个替换尝试。想看当前版本的全部参数,启动时加-h。
源码构建 exe 与注册 Windows 服务
用 MinGW 构建
构建需要 GNU Make 和 MinGW,唯一依赖是 WinDivert(需自备头文件与库)。源码当前版本为v0.2.3rc3,构建配置见 src/Makefile:
git clone https://gitcode.com/GitHub_Trending/go/GoodbyeDPI构建 x86 版:
make CPREFIX=i686-w64-mingw32- WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/x86构建 x86_64 版:
make CPREFIX=x86_64-w64-mingw32- BIT64=1 WINDIVERTHEADERS=/path/to/windivert/include WINDIVERTLIBS=/path/to/windivert/amd64装成 Windows 服务
不想一直开着控制台窗口,可以装成服务。发布包里service_install_russia_blacklist.cmd、service_install_russia_blacklist_dnsredir.cmd和service_remove.cmd是现成范例,照着自己的网络参数改一下即可。服务的注册与状态处理实现在 src/service.c。
排错速查:4 个高频故障
故障 1:很老的 Windows 7 上 WinDivert 驱动加载失败
- 症状:程序起不来,驱动无法加载
- 根源:过时的 Win7 不支持 SHA256 数字签名,驱动签不上
- 处置:安装 KB3033929(分 x86 / x64 版),或用 Windows Update 整体更新系统
故障 2:启动后网速时好时坏
- 症状:网络速度异常、时快时慢
- 根源:Intel / Qualcomm Killer 网卡的 Advanced Stream Detect 与 GoodbyeDPI 冲突
- 处置:进 Killer Control Center 把 Advanced Stream Detect 关掉
故障 3:加了-a之后个别网站打不开
- 症状:特定网站请求失败
- 根源:方法与 URI 间的额外空格符合 HTTP/1.1 规范,但少数网站解析较真
- 处置:去掉
-a,其余参数保留
故障 4:与 QUIK 等交易软件互相干扰
- 症状:两个软件同开时网络异常
- 根源:两者都会触碰数据包处理路径
- 处置:先启动 QUIK,再启动 GoodbyeDPI
一页速查卡与延伸阅读
- 不传参数 = 默认模式
-9,第一次使用直接用它 - IP ID 固定为
0x0000/0x0001的假 302 / Reset 是被动 DPI 的马脚,按指纹丢弃 - 7 种变形全部符合 TCP / HTTP 标准,网站端毫无感觉
- DNS 污染在解析阶段用
--dns-addr改道掐断 - 控制台窗口开着程序才在跑,关窗即停
延伸阅读:
- WinDivert 过滤器设置与主循环分发逻辑:src/goodbyedpi.c
- 假包生成与 TTL 追踪:src/fakepackets.c、src/ttltrack.c
- 其他平台(Linux / Android / 路由器)的同类项目列表:README.md 末尾
【免费下载链接】GoodbyeDPIGoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考