Antigravity无需TUN
Antigravity 编辑器不走系统代理,国内使用往往只能被迫开启 Clash 的 TUN 模式;但 TUN 是全局接管流量,本地开发、内网访问都会受影响,而且需要管理员权限。
Antigravity-Proxy 正是为了解决这个痛点:通过 DLL 劫持 + Winsock Hook,把 Antigravity 及其子进程的网络请求强制转到 SOCKS5/HTTP 代理上,不需要 TUN,普通用户权限即可运行,而且只代理指定进程,全局流量不受影响。
项目地址:https://github.com/yuaotian/antigravity-proxy
一、原理说明
整体架构
1 | 目标程序 → Winsock API (ws2_32.dll) → antigravity-proxy.dll(Hook 层) → 代理服务器(SOCKS5/HTTP) |
核心流程
- DLL 劫持:程序加载
version.dll→ 加载本 DLL → 转发真实version.dll的调用 - API Hook 安装:使用 MinHook 拦截网络与进程相关 API
- DNS 拦截:hook
getaddrinfo,分配 FakeIP(198.18.x.x)并记录域名映射 - 连接重定向:
connect(198.18.x.x)→ 还原域名 → 连接代理 → 完成 SOCKS5 握手 - 子进程传播:hook
CreateProcessW→ 挂起子进程 → 注入 DLL → 恢复运行
Hook 的 API
| API | 所属模块 | 用途 |
|---|---|---|
connect / WSAConnect / ConnectEx |
ws2_32.dll | 拦截连接(含异步) |
getaddrinfo / GetAddrInfoW |
ws2_32.dll | DNS 解析(ANSI / Unicode) |
WSAConnectByNameA/W |
ws2_32.dll | 按名称连接 |
CreateProcessW |
kernel32.dll | 进程创建,注入子进程 |
send / recv |
ws2_32.dll | 流量监控(可选) |
支持的代理协议:SOCKS5(推荐) 与 HTTP CONNECT。
二、准备工作
1. 准备可用的代理
启动 Clash / Mihomo 等代理软件,确认 SOCKS5 或 HTTP 端口可用(混合端口常见为 7890,SOCKS5 常见为 7891)。
2. 安装运行库
系统缺少 VC++ 运行库时会出现 0xc0000142 / 0xc0000135 报错,仓库内附带了 微软常用运行库合集-2025.exe,也可以自行安装 VC++ 2015-2022 运行库。
3. 下载对应架构的 Release
在 Releases 页面按架构下载,共四个压缩包:
antigravity-proxy-vX-ide-win-x64.zip/-x86.zip:桌面端,内含ide/(version.dll、config.json)antigravity-proxy-vX-cli-win-x64.zip/-x86.zip:CLI 端,内含cli/(dbghelp.dll、antigravity_proxy.dll、config.json)
三、部署步骤
桌面端
把 ide/ 内的文件复制到 Antigravity 主程序目录,与 Antigravity.exe 同级。
默认安装路径:
1 | C:\Users\<用户名>\AppData\Local\Programs\Antigravity |
CLI 端
把 cli/ 内的文件复制到 agy.exe 同级目录。
注意事项
ide/与cli/不要混用version.dll与config.json必须是同一次构建、且架构一致- Antigravity 更新后可能清理劫持文件,更新完需要重新复制一遍
Antigravity 2.0 已默认覆盖的目标进程:agy.exe、language_server.exe、language_server_windows、Antigravity.exe、Antigravity IDE.exe、node.exe。
四、配置说明
默认配置基本开箱即用,只需把 proxy.port 改成自己代理软件的端口:
| 配置项 | 默认值 | 说明 |
|---|---|---|
proxy.host / port / type |
127.0.0.1 / 7890 / socks5 |
代理地址、端口、协议 |
fake_ip.enabled |
true | FakeIP 系统开关 |
fake_ip.cidr |
198.18.0.0/15 |
虚拟 IP 段 |
timeout.connect/send/recv |
5000 | 超时时间(毫秒) |
child_injection |
true | 是否注入子进程 |
target_processes |
[] |
目标进程(空 = 全部) |
proxy_rules.allowed_ports |
[80, 443] |
端口白名单 |
proxy_rules.dns_mode |
direct | DNS 策略 |
proxy_rules.ipv6_mode |
proxy | proxy / direct / block |
proxy_rules.udp_mode |
auto | auto / block / direct / proxy |
proxy_rules.udp_fallback |
block | UDP 失败后的回退策略 |
diagnostics.agent_ip_probe |
false | 出口 IP 探测(排查 location 报错用) |
规则路由支持 CIDR、域名通配符、端口、协议分流,优先级可选 order 或 number。
不想手改 JSON 的话,仓库提供了可视化配置工具:resources/config-web/index.html(浏览器直接打开即可),或构建后的 output/config-web.html。
五、验证与日志
注入成功后,日志会输出到以下位置(按优先级):
<DLL 所在目录>\logs\proxy-YYYYMMDD.log%TEMP%\antigravity-proxy-logs\proxy-YYYYMMDD.log
六、常见问题
报错先排查出口 IP,不要先怀疑 DLL
这是作者反复强调的一点。如果出现 Agent execution terminated due to error,先看 %APPDATA%\Antigravity\logs\<最新目录>\ls-main.log,若日志中提示:
1 | FAILED_PRECONDITION (code 400): User location is not supported for the API use. |
说明 DLL 注入、SOCKS5 隧道都正常,问题出在代理出口 IP 被服务端判定不可用。注意「国家支持」不等于「该出口 IP 被接受」,同一国家不同 ASN、不同机房的结果可能完全不一样,优先更换非机房/住宅 ISP 出口。
排查顺序:
- 查 DLL 日志
<安装目录>\logs\proxy-YYYYMMDD.log,确认注入与 SOCKS5 是否成功 - 查应用日志
%APPDATA%\Antigravity\logs\<最新目录>\ls-main.log,确认是否 location 限制 - 更换出口 IP 重试
- 只有 DLL 日志里完全没有注入成功记录时,才回头排查 DLL
也可以把 diagnostics.agent_ip_probe 打开,直接输出出口 IP 诊断日志。
错误码对照
| 错误码 | 原因 | 解决方案 |
|---|---|---|
0xC0000142 |
架构不兼容 / 缺 VC++ 运行库 / 安全软件拦截 | 使用架构一致的版本;安装 VC++ 2015-2022;或静态编译 .\build.ps1 -StaticRuntime |
0xC000007B |
x86 / x64 位数混用 | 保证 DLL 与目标程序位数一致 |
0xC0000135 |
缺少依赖 DLL(VC++ 运行库) | 安装运行库或静态编译 |
VCRUNTIME140_1.dll 缺失 |
运行库未安装或被删除 | 安装对应架构运行库 |
0xC0000906 |
文件被安全软件拦截 / 损坏 | 重新获取文件并加白名单 |
0xC0000005 |
Hook 不兼容 / 目标进程范围过大 | 缩小 target_processes,关闭 child_injection 或 fake_ip |
10061(WSAECONNREFUSED) |
代理未启动或端口错误 | 启动代理,核对 config.json |
10060(WSAETIMEDOUT) |
代理不可达或超时过短 | 检查网络,增大 timeout |
IPv6 问题
出现 SOCKS5: 读取认证响应失败, WSA错误码=10060 且目标为 IPv6 时,把 ipv6_mode 改为 block 或 direct;也可以让代理监听 ::1 并同步修改 proxy.host。
UDP / QUIC
udp_mode=auto 在 SOCKS5 下会自动使用 UDP Associate,需要代理软件支持该能力。udp_fallback=direct 可能导致 UDP 直连泄漏(默认 block 更安全)。日志中大量出现 非 SOCK_STREAM socket 直连, soType=2,说明 UDP 没走代理。
安全软件拦截
360 安全卫士、火绒、腾讯电脑管家 等可能拦截 DLL 注入或 LSP,需要把 Antigravity 目录加入白名单;部分安全软件的 Winsock LSP 注入也会干扰 Hook。
七、WSL 环境
DLL 劫持方案无法代理 WSL 内部的流量(WSL2 使用 Linux 内核 socket,与 Winsock 完全独立)。替代方案:
| 方案 | 适用场景 | 复杂度 | 推荐度 |
|---|---|---|---|
| antissh(graftcp 包装) | 仅需在 WSL 内代理 Antigravity | 中等 | ⭐⭐⭐⭐⭐ |
| WSL Mirrored 网络模式 | Win11 22H2+ / WSL ≥ 2.0 | 低 | ⭐⭐⭐⭐ |
| TUN 全局代理 | 需要代理所有流量 | 低 | ⭐⭐⭐ |
八、进阶玩法
这个工具本质是通用的进程级强制代理方案,把 ide/ 内的文件复制到 Chrome、VS Code 等程序目录,再修改 config.json 里的 target_processes,同样可以强制走代理,无需 TUN。
二次开发入口:
| 模块 | 文件 |
|---|---|
| 配置加载 | src/core/Config.hpp |
| 网络 Hook | src/hooks/Hooks.cpp |
| SOCKS5 / HTTP CONNECT | src/network/Socks5.hpp / HttpConnect.hpp |
| FakeIP | src/network/FakeIP.hpp |
| DLL 劫持 | src/proxy/VersionProxy.cpp |
| 进程注入 | src/injection/ProcessInjector.hpp |
九、小结
- 免 TUN、仅代理指定进程、普通权限可用,适合「只代理 Antigravity」的场景
- 对话报错先排出口 IP,再排 DLL
- 架构、版本必须匹配,x86 / x64 混用会直接启动失败
- WSL 内无效,需要换用 antissh 或 Mirrored 网络模式
