Loading... # NoDPI DPI 绕过工具技术分析 # 一、概述 ## 1. 简介 ### A. 是什么 NoDPI 是一个用于绕过 DPI(Deep Packet Inspection,深度包检测)网络审查的工具。它通过修改网络数据包的格式和结构,欺骗 DPI 系统,从而恢复被封锁网站的访问。 ### B. 为什么关注 - 网络审查日益普遍,DPI 技术被广泛用于封锁网站和服务 - NoDPI 提供了一个轻量级、易用的绕过方案 - 开源项目,代码透明,使用安全 - 跨平台支持,包括 Windows、Linux、macOS 和 Android ### C. 应用场景 - 访问被 ISP 封锁的网站(如 YouTube) - 企业网络环境下访问受限资源 - 研究网络审查和 DPI 技术原理 ## 2. 前置知识 ### A. 必备概念 - DPI(深度包检测):基于数据包内容的流量检测和过滤技术 - TLS/SSL:加密传输协议,ClientHello 是握手阶段的关键消息 - SNI(Server Name Indication):TLS 扩展,包含目标域名 - 代理服务器:转发网络流量的中间服务器 ### B. 技术背景 DPI 系统通常通过检查 TLS 握手阶段的 ClientHello 消息中的 SNI 字段来识别用户访问的网站,进而实施封锁。 *** # 二、工作原理 ## 1. 核心机制 NoDPI 在本地启动代理服务器(默认 127.0.0.1:8881),用户将浏览器的代理指向该地址。程序拦截外出的 HTTPS 连接,对 ClientHello 消息进行分片处理,使其无法被 DPI 正确识别。 ```mermaid graph TB A[浏览器] --> B[NoDPI 代理] B --> C[ClientHello 处理] C --> D[碎片化数据包] D --> E[目标服务器] E --> B B --> A F[DPI 系统] ```  ## 2. 分片方法 ### A. 随机分片(默认) ClientHello 被分割成多个随机长度的片段,每个片段都附加 ClientHello 类型前缀,然后将所有片段在一个数据包中发送。 ### B. SNI 分片 ClientHello 被分成 4 个部分: 1. SNI 之前的部分 2. SNI 的前半部分 3. SNI 的后半部分 4. SNI 之后的部分 每个部分都附加类型前缀后打包发送。 ### C. TLS 版本伪装 无论使用哪种分片方法,程序都会将 TLS 版本替换为 1.3(最新的 TLS 版本)。这并不意味着数据实际按 TLS 1.3 规范传输,但可以进一步迷惑 DPI 系统。 *** # 三、核心特性 ## 1. 技术优势 ### A. 纯 Python 实现 - 仅使用 Python 标准库 - 无第三方依赖 - 代码简洁,易于审计 ### B. 易用性 - 直观的命令行界面 - 无需管理员权限即可运行 - 支持开机自启动(Windows/Linux) ### C. 灵活配置 - 支持黑名单模式 - 支持自动检测被封域名 - 可配置域名匹配模式(宽松/严格) ### D. 跨平台 - Windows、Linux、macOS - Android 版本 - Docker 部署支持 ## 2. 功能特性 ### A. 黑名单管理 - 从文件加载黑名单 - 自动检测被封域名 - 支持所有域名强制分片模式 ### B. 日志功能 - 访问日志 - 错误日志 - 便于审计和故障排查 ### C. 企业集成 - 可集成到企业网络 - 支持多用户使用 - 适合团队部署 *** # 四、快速上手 ## 1. 安装与运行 ### A. 可执行文件方式 ```bash # 下载并解压 # Windows nodpi.exe --blacklist blacklist.txt # Linux/macOS ./nodpi --blacklist ./blacklist.txt ``` ### B. 源代码方式 ```bash # 需要 Python 3.8+ git clone https://github.com/GVCoder09/NoDPI.git cd NoDPI python3 src/main.py ``` ### C. Docker 方式 ```bash # 构建镜像 sudo docker build -t nodpi-proxy . # 运行容器 sudo docker run -d \ --name nodpi \ -p 8881:8881 \ -v $(pwd)/blacklist.txt:/tmp/nodpi/blacklist.txt \ nodpi-proxy \ --host 127.0.0.1 \ --port 8881 \ --blacklist /tmp/nodpi/blacklist.txt \ --quiet ``` ## 2. 浏览器配置 将浏览器或系统代理设置为: - 地址:127.0.0.1 - 端口:8881 ## 3. 开机自启动 ```bash # 安装(仅可执行文件版本支持) nodpi --install # 卸载 nodpi --uninstall ``` *** # 五、命令行参数 ## 1. 完整参数列表 ``` usage: nodpi [-h] [--host HOST] [--port PORT] [--out-host OUT_HOST] [--blacklist BLACKLIST | --no-blacklist | --autoblacklist] [--fragment-method {random,sni}] [--domain-matching {loose,strict}] [--log-access LOG_ACCESS] [--log-error LOG_ERROR] [-q] [--install | --uninstall] ``` ## 2. 常用参数说明 | 参数 | 说明 | 默认值 | |------|------|--------| | --host | 代理监听地址 | 127.0.0.1 | | --port | 代理监听端口 | 8881 | | --blacklist | 黑名单文件路径 | blacklist.txt | | --no-blacklist | 对所有域名使用分片 | False | | --autoblacklist | 自动检测被封域名 | False | | --fragment-method | 分片方法(random/sni) | random | | --domain-matching | 域名匹配模式(loose/strict) | strict | | --log-access | 访问日志路径 | - | | --log-error | 错误日志路径 | - | | -q, --quiet | 禁用 UI 输出 | False | | --install | 添加到开机自启动 | - | | --uninstall | 从开机自启动移除 | - | *** # 六、技术限制 ## 1. 功能限制 ### A. 仅支持 HTTPS - HTTP 流量仅兼容性转发,不进行分片处理 - HTTP 协议已过时,基本不受封锁影响 ### B. 无法绕过的封锁类型 - 基于 IP 地址的封锁 - 部分需要特殊方法的站点(如 Instagram、Facebook) ### C. 依赖提供商封锁方式 - 不同 ISP 可能使用不同的封锁技术 - 效果因提供商而异 ## 2. 性能考虑 ### A. DPI 漏洞可能被修补 - 当前有效是因为 DPI 计算资源限制 - 未来可能升级识别能力 ### B. 不隐藏流量 - ISP 仍可见连接的 IP 地址 - 不提供 VPN/Tor 的匿名性 *** # 七、安全与隐私 ## 1. 数据保护 - 不收集任何用户数据 - 不向第三方发送信息 - 不干预系统进程 - 不需要管理员权限 ## 2. 加密完整性 - HTTPS 流量保持加密 - 仅修改数据包格式,不解密内容 - 不影响传输安全性 ## 3. 法律风险 - 使用本身在俄罗斯合法(截至 2025 年 10 月) - 但宣传和分发可能承担行政责任 - 用户需自行承担使用风险 *** # 八、替代方案对比 ## 1. 主要替代工具 | 工具 | 平台 | 特点 | |------|------|------| | GoodbyeDPI | Windows | 功能更强大,支持更多站点 | | zapret | Linux/macOS/Windows | 综合性解决方案 | | Green Tunnel | Linux/macOS/Windows | 多平台支持 | | PowerTunnel | 全平台 | 功能丰富 | | ByeDPI | Linux/Windows/Android | 无需 root(Android) | | SpoofDPI | macOS/Linux | 轻量级 | ## 2. NoDPI 的定位 - 更简单但功能较少 - 适合普通用户使用 - 特别适合 YouTube 解封 *** # 九、常见问题 ## 1. 法律问题 **Q:在俄罗斯使用 NoDPI 合法吗?** A:截至 2025 年 10 月,使用完全合法。但宣传和分发可能面临行政责任。 ## 2. 安全性 **Q:使用安全吗?** A:是的。HTTPS 流量保持加密,程序不收集用户信息。 ## 3. 隐私保护 **Q:能否隐藏我访问的网站?** A:不能。ISP 仍可见连接的 IP 地址。不像 VPN 或 Tor,NoDPI 不提供匿名性。 ## 4. 兼容性 **Q:支持哪些平台?** A:Windows、Linux、macOS、Android 和 Docker。 *** # 十、技术架构 ## 1. 代码结构 ``` NoDPI/ ├── src/ │ └── main.py # 主程序入口 ├── blacklist.txt # 默认黑名单 ├── nodpi.spec # PyInstaller 打包配置 ├── Dockerfile # Docker 镜像配置 └── assets/ # 资源文件 ``` ## 2. 技术栈 - 语言:Python 3.8+ - 依赖:仅标准库 - 打包:PyInstaller - 容器:Docker ## 3. 数据流处理 ```mermaid sequenceDiagram participant C as 客户端浏览器 participant N as NoDPI 代理 participant D as DPI 系统 participant S as 目标服务器 C->>N: HTTPS 请求 N->>N: 拦截 ClientHello N->>N: 分片处理 N->>D: 碎片化数据包 D-->>N: 无法识别,放行 N->>S: 转发请求 S-->>N: 响应 N-->>C: 返回结果 ```  *** # 十一、总结与展望 ## 1. 优势总结 - 轻量级、易用的 DPI 绕过工具 - 跨平台支持,部署灵活 - 开源透明,安全性高 - 对 YouTube 等主流网站效果良好 ## 2. 局限性 - 功能相对简单,不如 GoodbyeDPI 强大 - 无法绕过 IP 封锁 - 部分站点(如 Instagram、Facebook)无效 - 未来可能被 DPI 系统升级而失效 ## 3. 适用场景 - 个人用户解除基本的网站封锁 - 不需要复杂配置的简单场景 - 对 YouTube 等视频网站的访问 - 学习和研究 DPI 绕过技术 *** ## 参考资料 1. [NoDPI GitHub 仓库](https://github.com/GVCoder09/NoDPI) 2. [GoodbyeDPI by ValdikSS](https://github.com/ValdikSS/GoodbyeDPI) 3. [Deep Packet Inspection - Wikipedia](https://en.wikipedia.org/wiki/Deep_packet_inspection) 最后修改:2026 年 01 月 18 日 © 允许规范转载 赞 如果觉得我的文章对你有用,请随意赞赏