代理软件工作逻辑
用户输入
https://www.google.com
│
▼
getaddrinfo("www.google.com")
│
hosts 命中
│
得到 8.8.8.8
│
TCP connect(8.8.8.8:443)
│
TLS ClientHello
SNI = www.google.com
│
WFP/TUN 代理解析 SNI
│
匹配规则:google.com → Proxy
│
阻止原始直连(或接管连接)
│
建立到代理服务器的连接
│
CONNECT www.google.com:443
或 SOCKS5(DOMAIN)
│
代理服务器解析 DNS
│
建立到真实 Google 服务器的 TLS 连接
Application
│
Winsock
│
AFD.sys
│
TCPIP.sys
│
WFP Callout
│
NDIS
│
NIC
Chrome
│
getaddrinfo()/hosts/DNS
│
得到目标 IP
│
TCP 三次握手
│
Client Hello(明文)
│
SNI = www.google.com
│
┌─────────────────────────────────┐
│ WFP Callout / TUN Driver 截获数据包 │
│ │
│ ① 判断是否 TLS │
│ ② 解析 Client Hello │
│ ③ 提取 SNI │
│ ④ 域名规则匹配 │
│ ⑤ Direct / Proxy / Block │
└─────────────────────────────────┘
│
转发到目标服务器
用户态 (User Mode)
──────────────────────────────────────────────
应用程序
Chrome
QQ
微信
curl
浏览器
│
│ socket()
│ connect()
│ send()
▼
ws2_32.dll
(Winsock API)
│
│ 系统调用(System Call)
▼
================ 用户态 / 内核态分界 =================
内核态 (Kernel Mode)
AFD.sys
(Ancillary Function Driver)
│
TCPIP.sys
(TCP/IP协议栈)
│
WFP
(Windows Filtering Platform)
│
NDIS
│
网卡驱动
│
网卡
应用程序
│
Winsock
│
AFD.sys
│
TCPIP.sys
│
==========================
Windows Filtering Platform
==========================
│
WFP Callout Driver(你开发)
│
NDIS
│
网卡驱动
| 组件 | 用户态/内核态 | 作用 |
|---|---|---|
| 应用程序(Chrome、QQ) | 用户态 | 发起网络请求 |
| ws2_32.dll(Winsock API) | 用户态 | 提供 socket()、connect()、send()、recv() 等 Socket 接口 |
| AFD.sys | 内核态 | 将 Winsock 请求转换为内核网络 I/O,管理 Socket |
| tcpip.sys | 内核态 | Windows TCP/IP 协议栈,实现 TCP、UDP、IP 等协议 |
| WFP(Windows Filtering Platform) | 内核态 | 网络包过滤、重定向、代理、VPN、防火墙等功能 |
| NDIS | 内核态 | 网卡驱动框架,与物理网卡交互 |
Winsock(用户态)负责"应用如何发起网络请求",AFD.sys(内核态)负责"把 Socket 请求交给 TCP/IP",tcpip.sys 负责协议处理,而 WFP 则负责在数据包真正收发过程中进行过滤、重定向和代理。

共有 0 条评论