# exe2proxy **Repository Path**: konyshe/exe2proxy ## Basic Information - **Project Name**: exe2proxy - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-02-14 - **Last Updated**: 2026-02-14 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # exe2proxy - 进程流量拦截工具 exe2proxy 是一个 Windows 进程级网络流量拦截、分析和重定向工具。它可以精确捕获指定进程的所有网络流量,识别应用层协议,并支持将流量重定向到第三方代理。 ## 功能特性 - **进程级流量拦截** - 精准拦截指定进程(PID 或进程名)的所有网络流量 - **传输层分析** - 显示所有 TCP/UDP 连接详情(源/目的地址、端口、数据包大小) - **应用层协议识别** - 自动识别并解析多种应用层协议: - HTTP(请求方法、URL、Host、响应状态码) - HTTPS/TLS(版本检测、SNI 域名提取、握手分析) - DNS(查询/响应、域名解析) - SMTP(邮件传输命令) - FTP(文件传输命令) - SSH(Banner 识别) - Telnet - POP3(邮件收取) - IMAP(邮件访问) - NNTP(新闻组) - LDAP(目录访问) - NFS/RPC(网络文件系统) - XMPP(即时通讯) - IRC(网络聊天) - MySQL(数据库协议) - Redis(缓存协议) - **流量重定向** - 将指定进程的所有流量重定向到 SOCKS5 或 HTTP 代理 - **启动并代理** - 由 exe2proxy 启动指定进程,确保进程启动时的所有网络连接都经过代理(解决启动时连接丢失问题) - **子进程追踪** - 可选追踪目标进程的子进程树,一并重定向所有子进程流量 - **连接列表** - 列出系统所有活跃网络连接及对应进程 ## 系统要求 - Windows 10/11(需要管理员权限) - [WinDivert](https://reqrypt.org/windivert.html) 驱动(v2.x) ## 安装 ### 1. 编译 ```bash go build -o exe2proxy.exe ./cmd/exe2proxy/ ``` ### 2. 安装 WinDivert 从 [WinDivert 官网](https://reqrypt.org/windivert.html) 下载最新版本,将以下文件放到 exe2proxy.exe 同目录: - `WinDivert.dll` - `WinDivert64.sys` ## 使用方法 **所有命令需要以管理员权限运行。** ### 查看活跃连接 ```bash # 列出所有活跃网络连接 exe2proxy list # 按进程名过滤 exe2proxy list -f chrome # 只看 TCP 连接 exe2proxy list --udp=false ``` ### 捕获进程流量 ```bash # 按进程名捕获 exe2proxy capture -n chrome.exe # 按 PID 捕获 exe2proxy capture -p 1234 # 只看传输层 exe2proxy capture -n chrome.exe --app=false # 只看应用层 exe2proxy capture -n chrome.exe --transport=false # 输出到日志文件 exe2proxy capture -n chrome.exe --log output.log # 指定 WinDivert.dll 路径 exe2proxy capture -n chrome.exe --dll "C:\path\to\WinDivert.dll" ``` ### 重定向流量到代理 ```bash # 通过 SOCKS5 代理重定向 exe2proxy redirect -n chrome.exe --proxy socks5://127.0.0.1:7890 # 通过 HTTP 代理重定向 exe2proxy redirect -n chrome.exe --proxy http://127.0.0.1:7890 # 带认证的代理 exe2proxy redirect -p 1234 --proxy socks5://127.0.0.1:7890 --proxy-user admin --proxy-pass secret ``` ### 启动进程并代理(推荐) 使用 `run` 命令可以由 exe2proxy 启动指定进程,确保在进程发出任何网络请求之前代理拦截已就绪。 这解决了使用 `redirect` 命令时进程启动瞬间的网络连接无法被代理的问题。 ```bash # 启动 curl 并通过 SOCKS5 代理 exe2proxy run --proxy socks5://127.0.0.1:7890 -- curl.exe https://example.com # 启动 curl 并通过 HTTP 代理 exe2proxy run --proxy http://127.0.0.1:7890 -- curl.exe https://example.com # 启动程序并追踪其所有子进程的流量 exe2proxy run --proxy socks5://127.0.0.1:7890 --children -- myapp.exe --arg1 value # 带代理认证 exe2proxy run --proxy socks5://127.0.0.1:7890 --proxy-user admin --proxy-pass secret -- program.exe # 指定 WinDivert.dll 路径 exe2proxy run --proxy socks5://127.0.0.1:7890 --dll "C:\path\to\WinDivert.dll" -- program.exe ``` **工作原理:** 1. exe2proxy 先初始化 WinDivert 拦截和本地透明代理 2. 使用 `CREATE_SUSPENDED` 标志创建目标进程(进程已创建但暂停执行) 3. 记录子进程 PID 4. 恢复进程执行 — 此时所有网络流量都会被拦截并通过代理转发 5. 子进程退出后 exe2proxy 自动退出 ## 输出示例 ### 传输层输出 ``` 14:30:05.123 TCP 192.168.1.100:52341 → 142.250.80.46:443 [chrome.exe PID:5678] (1460 bytes) 14:30:05.125 UDP 192.168.1.100:55123 → 8.8.8.8:53 [chrome.exe PID:5678] (45 bytes) ``` ### 应用层输出 ``` 14:30:05.120 DNS 192.168.1.100:55123 → 8.8.8.8:53 DNS Query: www.google.com domain: www.google.com id: 0xa1b2 14:30:05.123 HTTPS/TLS 192.168.1.100:52341 → 142.250.80.46:443 TLS ClientHello → www.google.com sni: www.google.com version: TLS 1.3 14:30:05.200 HTTP 192.168.1.100:52800 → 93.184.216.34:80 GET /index.html HTTP/1.1 host: example.com request_line: GET /index.html HTTP/1.1 ``` ## 架构 ``` exe2proxy/ ├── cmd/exetun/ # CLI 入口(cobra 命令行框架) │ └── main.go ├── internal/ │ ├── divert/ # WinDivert 封装(纯 Go syscall 调用) │ │ └── divert.go │ ├── engine/ # 核心引擎 │ │ ├── engine.go # 流量捕获引擎 │ │ └── redirect.go# 流量重定向引擎(含 run 模式) │ ├── procexec/ # 进程启动与管理 │ │ └── procexec.go# CreateProcess (suspended) / 子进程树扫描 │ ├── procnet/ # 进程-连接映射 │ │ └── procnet.go # Windows API (GetExtendedTcpTable/GetExtendedUdpTable) │ ├── protocol/ # 应用层协议解析器 │ │ └── protocol.go │ └── proxy/ # 代理重定向器(SOCKS5/HTTP CONNECT) │ └── proxy.go ├── go.mod └── README.md ``` ### 工作原理 1. **流量拦截** - 使用 WinDivert 在 Windows 网络层拦截数据包 2. **进程匹配** - 通过 `GetExtendedTcpTable`/`GetExtendedUdpTable` API 将网络连接映射到进程 PID 3. **协议识别** - 对匹配的数据包进行应用层协议深度检测 4. **流量重定向** - 修改数据包目的地址,将连接转发到本地透明代理,再经由上游代理转发 5. **进程启动模式** - 使用 `CreateProcessW` + `CREATE_SUSPENDED` 创建挂起进程,确保拦截就绪后再恢复执行 6. **子进程追踪** - 通过 `CreateToolhelp32Snapshot` 周期性扫描进程树,自动发现并追踪子进程 ## 注意事项 1. **需要管理员权限** - WinDivert 需要管理员权限来安装内核驱动 2. **WinDivert 驱动** - 首次运行时 WinDivert 会自动安装驱动,可能触发安全提示 3. **性能** - 高流量场景下连接表刷新频率可能影响匹配准确性 4. **HTTPS 内容** - 仅能识别 TLS 握手中的 SNI,无法解密加密流量内容 5. **IPv6** - 当前版本主要支持 IPv4,IPv6 支持有限 ## License MIT