EgressProbe¶
一个 Windows 网络出口检测工具,用一份 HTML 报告回答三个问题:我现在从哪里上网、本机有几个出口、不同网站分别走哪个出口。
GitHub:BeyondXinXin/EgressProbe
1 为什么做这个工具¶
这个项目来自一个很具体的问题。
Windows 上同时存在公司网络、系统代理、VPN、Tailscale 等网络环境时,“浏览器能不能访问某个网站”并不能直接说明流量到底走了哪里。
经常会出现这种情况:
- 国内网站走公司网络
- Google / ChatGPT 走系统代理
- 某个程序绕过系统代理
- Tailscale 存在,但并不是公网出口
- 浏览器正常,命令行却走了另一条路径
这时候只查一个公网 IP 并没有太大意义。
我真正想知道的是:
EgressProbe 就是把这些信息一次性收集起来,并给出一份可以直接看的结果。
2 使用方式¶
工具没有常驻窗口。
双击运行后:
看完报告以后直接关闭浏览器即可。
它不会修改代理、路由、网卡或任何系统网络配置,只负责检测。
3 报告内容¶
生成的报告主要分成几部分。
当前出口¶
展示当前公网 IP、国家 / 地区、运营商、ASN,以及这个 IP 更接近家庭 / 企业宽带、机房 VPS 还是移动网络。
系统代理¶
读取 Windows 系统代理配置,并尝试识别本地监听代理端口对应的进程。
例如可以看到:
网站走哪个出口¶
针对配置中的域名逐个判断,例如:
百度 → China / 直连
Google → United States / 代理
ChatGPT → United States / 代理
OpenAI 鉴权 → United States / 代理
网卡与直连出口¶
程序会枚举本机网卡和路由,并尝试从不同本机源地址发起公网检测请求,得到每张网卡实际对应的公网出口。
这比只显示本机 192.168.x.x、100.x.x.x 地址更有意义。
4 技术实现¶
项目使用 Go 1.26 编写,Windows 系统调用主要通过 golang.org/x/sys 完成。
为了尽量得到系统真实状态,网络部分没有依赖 ipconfig、route print 等命令行文本解析,而是直接使用 Windows API。
包括:
GetAdaptersAddressesGetIpForwardTable2GetExtendedTcpTableCreateToolhelp32Snapshot
4.1 网卡和路由¶
通过 Windows API 获取完整网卡和路由表,再按照最长前缀匹配规则判断目标地址应走的接口。
这样可以处理多网卡、VPN、Tailscale 等同时存在的情况。
4.2 系统代理¶
系统代理从 Windows Internet Settings 中读取:
ProxyEnableProxyServerAutoConfigURLProxyOverride
因此报告可以区分“默认路由会怎么走”和“启用了系统代理以后浏览器类请求会怎么走”。
4.3 代理进程识别¶
通过 TCP 监听表获得本机监听端口对应的 PID,再通过进程快照解析进程名称。
因此当系统代理配置为 127.0.0.1:xxxx 时,可以进一步告诉我这个端口究竟是哪一个程序开的。
4.4 公网 IP 探测¶
程序会分别:
- 按默认路径请求公网检测服务
- 绑定指定网卡源地址请求
- 通过系统代理请求
然后比较返回的公网 IP。
公网信息使用多个公开服务,并带有失败回退,避免单个服务不可用导致整个报告失败。
5 为什么输出 HTML¶
EgressProbe 本身没有做传统桌面 GUI,而是把结果生成一份自包含的 report.html。
HTML、CSS 和必要脚本都嵌入程序,运行时直接写出完整报告。
这样做有几个好处:
- 网络诊断结果天然适合表格和卡片展示
- 不需要为一次性报告维护复杂桌面 UI
- 浏览器的排版和缩放体验更成熟
- 生成后的报告可以单独保留
- 主程序仍然可以保持非常轻量
这个设计也符合这个工具的使用方式:运行一次,看结果,然后退出。
6 配置¶
配置保存在:
可以指定检测超时和需要判断出口的网站:
{
"timeoutSeconds": 4,
"routeTargets": [
"baidu.com",
"google.com",
"chatgpt.com",
"auth.openai.com"
]
}
运行数据统一位于:
7 项目总结¶
EgressProbe 不是 VPN 或代理工具,它不会帮用户改变网络。
它只做一件事:
把 Windows 当前实际存在的网络路径整理清楚。
这个项目对我最大的价值,是把过去需要用 ipconfig、路由表、代理设置、端口查看工具和多个公网 IP 网站分别确认的信息,合并成了一次检测。
源码: