GoodbyeDPI 绕过 ISP 深度包检测完全解析
【免费下载链接】GoodbyeDPIGoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI
现场还原
输入网址按回车:页面要么转圈三秒后跳到"连接已中断",要么被重定向到一个拦截提示页——而这个提示页根本不是网站方发的。更糟的是,有的页面只转圈、不给任何提示。你的电脑和目标网站都没毛病,作怪的是链路中间那台**深度包检测(DPI)**设备。
项目名片
GoodbyeDPI 是 Windows 上的免费开源 DPI 规避工具。一个可执行文件,不注册账号、不留常驻后台,控制台窗口一关进程就没了,装完即装即用、关掉即停。它支持 Windows 7/8/8.1/10/11,需要管理员权限;想从源码自己编译,只要 MinGW 加上 WinDivert 的头文件和库,构建脚本在 src/Makefile。
它的能力清单:
丢弃被动 DPI 抢发回来的假拦截响应
拆分首个 HTTP/HTTPS 数据包,拦住内容分类器
改写 Host 头写法、随机打乱其字母大小写
发射带错误TTL、校验和与序列号的假包做诱饵
把 DNS 查询重定向到公共解析器的非标准端口
可注册成 Windows 服务,后台无人值守运行
先跑起来再验证
从项目 Releases 页下载最新版压缩包并解压:里面是
goodbyedpi.exe和几个现成的.cmd启动脚本。以管理员身份打开终端再执行下面的步骤,普通权限会直接加载失败。按地区挑脚本运行:俄罗斯用户跑
1_russia_blacklist_dnsredir.cmd,其他地区跑2_any_country_dnsredir.cmd。控制台窗口开着,程序就在干活,关掉即停。验证有个零安装土办法:先在浏览器里打开内置的"安全 DNS(DoH)"(Chrome 在隐私与安全设置,Firefox 在网络设置),然后不带任何参数运行
goodbyedpi.exe。之前打不开的页面现在能开了,说明运营商的 DPI 可被规避——直接默认用,或再往下调参。
原理拆解
它到底改了数据包的哪几个字节
被动 DPI 是旁路接在链路边上的(分光器或端口镜像),手段就一个:比真实网站回得更快。HTTP 请求被它甩一个 302 重定向拐走,HTTPS 连接被它塞一个 TCP 重置掐断。它发的包留了个心虚指纹:IP ID字段几乎总是固定的0x0000或0x0001。GoodbyeDPI 只做一件事——把符合该指纹的包丢掉,配套的 TTL 追踪与丢弃逻辑在 src/ttltrack.c。
主动 DPI 串在链路中间,难糊弄得多,程序连出 7 招:
首个数据包做 TCP 级分片
持久keep-aliveHTTP 会话也分片
Host头名替换成hoSt去掉
Host头名与值之间的空格方法(GET 等)与 URI 之间加一个额外空格
Host 值大小写随机混合,test.com 变成 tEsT.cOm
发送 TTL 过小、校验和错误、序列号停在过去的假 HTTP/HTTPS 包
前两种"分片"用白话说:整包不一次发完,拆成几个小段陆续出去。分类器想靠完整首包认内容,如今只拿到撕开信纸的一页,认不出来。假包的生成在 src/fakepackets.c,能仿出 Firefox 130 的 TLS ClientHello 形态。
DNS 污染走的是另一条路:--dns-addr加--dns-port把本机 UDP DNS 查询转投公共解析器的非标准端口(比如 Yandex DNS 的77.88.8.8:1253),被污染的 53 端口应答就追不上你了。实现在 src/dnsredir.c。
为什么改完网站端毫无感知
因为每一处改动都合规。头名大小写本就不敏感,服务器收到 hoSt 和 Host 一视同仁;方法与 URI 之间多一个空格,HTTP/1.1 规范(Tolerant Applications 一节)明确容忍。假包那边,自动 TTL 模式会先观察真实服务器 SYN/ACK 的 TTL,算出中间隔了多少跳,再把假包 TTL 设成差一跳——它到不了服务器,半路就死了;校验和、序列号出错的假包也直接在对端被丢弃。真实流量的语义内容一个字节没改,网站端自然毫无察觉。
这套手段的天花板在哪
⚠️ 先说清楚:这一切糊弄的是"内容分类器"。运营商若升级成域名黑名单加 SNI 匹配,这些手段的成色会打折。-a的额外空格虽合法,个别较真的解析器会报错、弄坏个别站点。--set-ttl/--auto-ttl在文档里被标为危险选项——固定 TTL 的假包可能真伤害到真实流量,建议搭配--blacklist限定范围使用。最后,大文件传输时逐包处理吃 CPU,--max-payload可以跳过超大载荷的包。
配置参考
想核对当前版本支持的全部开关,先跑一下:
goodbyedpi.exe -h-h参数列出本构建支持的所有选项,拿它对照下面两张表最稳妥。
常用参数:
| 参数 | 干什么 | 什么时候用 |
|---|---|---|
| -p | 拦截被动 DPI | 运营商搞拦截页重定向 |
| -q | 拦截 QUIC/HTTP3 | 切 HTTP3 后仍被拦 |
| -r | Host 换成 hoSt | 基础伪装,默认安全 |
| -s | 去掉 Host 名与值间空格 | 搭配 -r 一起用 |
| -m | Host 值大小写随机化 | 被动 DPI 特别较真时 |
| -f <值> | 设 HTTP 分片大小 | 糊弄内容分类器 |
| -e <值> | 设 HTTPS 分片大小 | HTTPS 也在被篡改时 |
| -a | 方法与 URI 间加空格 ⚠️ | 多数网站没事,少数会坏 |
| --blacklist <文件> | 只对列表域名做规避 | 有现成封锁清单时 |
| --dns-addr / --dns-port | DNS 转投指定地址和端口 | 运营商在污染 DNS |
| --max-payload | 跳过超大载荷的包 | CPU 飙高、传输多 |
组合模式:
| 模式号 | 展开后的参数 | 一句话点评 |
|---|---|---|
| -4 | -p -r -s | 传统组里最快 |
| -1 | -p -r -s -f 2 -k 2 -n -e 2 | 最兼容的传统模式 |
| -5 | -f 2 -e 2 --auto-ttl --reverse-frag --max-payload | 自动 TTL,差一跳就死 |
| -6 | -f 2 -e 2 --wrong-seq --reverse-frag --max-payload | 坏序列号诱饵 |
| -7 | -f 2 -e 2 --wrong-chksum --reverse-frag --max-payload | 坏校验和诱饵 |
| -8 | -f 2 -e 2 --wrong-seq --wrong-chksum --reverse-frag --max-payload | 两种诱饵齐上 |
| -9 | 同 -8 再加 -q | 默认模式,兼管 QUIC |
故障对照
出问题时先对着这张表自查,多数坑都有现成答案:
| 现象 | 根因 | 处置 |
|---|---|---|
| 老 Win7 起不来、驱动加载失败 | 旧 Win7 缺 SHA256 签名校验,WinDivert 签不上 | 安装 KB3033929,或直接用 Windows Update 升满系统 |
| 启动后网络时好时坏、速度异常 | Killer 网卡的 Advanced Stream Detect 与程序冲突 | 到 Killer Control Center 关掉该开关 |
| 加了 -a 后个别网站打不开 | 个别解析器较真方法与 URI 间的空格 | 去掉 -a,其余参数保留 |
| 与 QUIK 交易终端互相干扰 | 两者都碰数据包处理路径 | 先启动 QUIK,再启动 GoodbyeDPI |
| ⚠️ 固定 TTL 假包模式弄坏网站 | 坏包真实到达了服务器 | 换 --wrong-chksum 方案,或搭配 --blacklist 限域 |
收束
记住这三点:
指纹拦截,把假拦截响应挡在门外
合规变形加假包,让主动 DPI 的分类器失效
DNS 重定向,把污染掐死在解析阶段
想继续往下挖:读透原理就去看 src/goodbyedpi.c,WinDivert 过滤器的设置和包的分发逻辑都在这,它是整个工具的总调度。另外如果你在 Linux、Android 或路由器上也有同类需求,把 zapret、ByeDPI、PowerTunnel、Green Tunnel 拉出来横向对比一遍,选型会清楚很多。
【免费下载链接】GoodbyeDPIGoodbyeDPI — Deep Packet Inspection circumvention utility (for Windows)项目地址: https://gitcode.com/GitHub_Trending/go/GoodbyeDPI
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考