尧图精选

SNI-Spoofing 架构深度解析:代理、注入、监控三大模块如何协作骗过DPI?

🕒 发布时间:2026/10/1 8:35:22 📁 来源:尧图网络
SNI-Spoofing 架构深度解析代理、注入、监控三大模块如何协作骗过DPI【免费下载链接】SNI-SpoofingBypass DPI with IP/TCP-Header manipulation项目地址: https://gitcode.com/gh_mirrors/sn/SNI-SpoofingSNI-Spoofing 是一款运行在 Windows 上的DPI 规避工具核心功能是通过SNI 伪造与TCP 头部操纵wrong_seq 注入法绕过深度包检测DPI封锁。它监听本地端口把客户端流量伪装成访问白名单域名如auth.vercel.com的 HTTPS 连接再悄悄转发到真实目标服务器。先搞懂背景DPI 为什么会拦你的连接普通防火墙只看 IP 和端口而DPI深度包检测会拆开数据包读取 TLS 握手中的SNI 字段——即你在浏览器地址栏输入的那个域名。一旦被识别为被封锁域名连接立刻中断。SNI-Spoofing 的思路很巧妙TCP 层正常握手只在发出第一个数据包的瞬间注入一个 SNI 指向白名单域名的伪造 ClientHello等 DPI 放行后再恢复正常传输。这就是骗过 DPI的全部秘密。三大模块一览3 分钟看懂项目结构模块文件角色一句话说明代理模块main.py前台接线员监听本地端口、建立出站连接、双向转发数据注入模块fake_tcp.py injecter.py幕后魔术师拦截网卡流量在握手关键帧注入伪造包监控模块monitor_connection.py状态记录员为每条连接维护五元组与握手状态数据包工厂utils/packet_templates.py伪造件工坊按模板拼装 517 字节的 ClientHello网络工具utils/network_tools.py地址探测器探测默认网卡出口 IPv4整个项目仅依赖 requirements.txt 中的一个库pydivertWindows 下对 WinDivert 的 Python 封装轻量到什么程度整个仓库只有 372KB。代理模块 main.py连接的前台接线员启动时main.py 做三件事读取配置从 config.json 加载监听地址、目标 IP 和目标端口创建监听套接字在本地端口默认 40443等待客户端连接并为连接配置 TCP Keep-Alive 参数防止链路超时为每条新连接开工厂为每个进来的客户端创建一个绑定本机出口 IP 的出站套接字向真实目标如CONNECT_IP:443发起 TCP 连接随后建立双向异步中继——本地进来的数据发给远端远端回来的数据发回本地。值得注意的是出站连接创建后并不立刻放行握手。代码会等待一个叫t2a_event的事件timeout 2 秒这个事件由注入模块在确认伪造包已被服务端 ACK之后才触发。握手没骗过去连接就干净地关闭——这是保证不暴露的关键。️注入模块 fake_tcp.pyTCP 头操纵的核心魔法这是整个项目最精彩的 150 行。fake_tcp.py 通过继承 injecter.py 中的TcpInjector基类把 WinDivert 的流量过滤器精确指向本机 IP ↔ 目标 IP之间的 TCP 流量然后对每个包做剧本式校验出站方向on_outbound_packet捕获SYN记录初始序列号syn_seq放行捕获ACK握手完成的确认包扣住不放立即启动一个线程等 1 毫秒后把伪造的 ClientHello 数据嫁接到这个 ACK 包上——补上 PSH 标志、改写 IP 长度、把 TCP 序列号改成syn_seq 1 - payload长度即故意算错然后注入网络。入站方向on_inbound_packet校验服务端SYN-ACK的序列号/确认号是否匹配不匹配立刻拆连接收到服务端对伪造数据的ACK后宣布骗过 DPI触发t2a_event代理模块才开始真正转发。所谓wrong_seq错误序列号技巧DPI 设备通常只校验第一个包是不是合法握手包而不对序列号做严格核算。一个序列号不合法但内容看起来像白名单 HTTPS 握手的包足以让 DPI 放行而真正的服务端 TCP 栈会按实际数据重新同步。伪造包本身由 utils/packet_templates.py 的ClientHelloMaker生成它内置一个真实抓取的 517 字节 ClientHello 模板运行时只替换随机数、会话 ID、SNI 字段和 key_share 四个位置其余字节保持原汁原味最大限度降低被特征库识别的概率。监控模块 monitor_connection.py每条连接的体检卡monitor_connection.py 中的MonitorConnection看似简单却是三大模块协作的黑板每条连接用(源IP, 源端口, 目标IP, 目标端口)五元组作为唯一 ID记录syn_seq、syn_ack_seq两个握手状态值供注入模块逐包比对持有thread_lock因为 WinDivert 运行在独立线程代理侧运行在 asyncio 事件循环两线程共享连接对象锁保证状态一致提供t2a_event线程安全的事件桥让包线程能通知 asyncio 主循环握手骗过去了可以放行了。fake_tcp.py中的FakeInjectiveConnection继承它并追加伪造数据、注入方法等字段正是监控与注入的合体。协作全流程一次偷天换日的时间线客户端连接本地40443代理模块创建出站连接并开始握手main.py注入模块捕获 SYN / SYN-ACK / ACK全部校验放行在 ACK 帧注入伪造 ClientHellofake_tcp.py服务端 ACK 伪造数据monitor状态标记fake_data_ack_recv监控黑板点亮事件monitor_connection.py代理模块收到事件拆除监控双向中继正式开启此后流量原样穿透任何一步序列号对不上 →on_unexpected_packet直接双向关闭宁折不弯。整个过程发生在毫秒级客户端完全无感。最快配置方法config.json 逐项说明字段默认值含义LISTEN_HOST/LISTEN_PORT0.0.0.0/40443本地监听地址与端口CONNECT_IP/CONNECT_PORT188.114.98.0/443真实目标服务器FAKE_SNIauth.vercel.com伪装的白名单域名DPI 看到的就是它修改 config.json 后重启程序即可无需改动任何代码。⚙️快速上手安装与运行步骤准备一台Windows机器WinDivert 仅支持 Windows以管理员身份运行克隆仓库git clone https://gitcode.com/gh_mirrors/sn/SNI-Spoofing安装依赖pip install -r requirements.txt按需修改 config.json 中的目标与伪域名运行python main.py然后把客户端如代理客户端指向本机40443端口。总结SNI-Spoofing 用极简的三模块分工实现了教科书级的 DPI 规避main.py 负责面上的代理与转发fake_tcp.py 负责地下的包注入monitor_connection.py 负责把两边缝合成一条状态机。它的价值不仅在于功能更在于是一份易读的 TCP 注入范例——如果你想深入理解 WinDivert、序列号操纵与 TLS 握手细节这是非常好的开源样本。【免费下载链接】SNI-SpoofingBypass DPI with IP/TCP-Header manipulation项目地址: https://gitcode.com/gh_mirrors/sn/SNI-Spoofing创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联 返回资讯列表 →