跳转至

EgressProbe

一个 Windows 网络出口检测工具,用一份 HTML 报告回答三个问题:我现在从哪里上网、本机有几个出口、不同网站分别走哪个出口。

GitHub:BeyondXinXin/EgressProbe


1 为什么做这个工具

这个项目来自一个很具体的问题。

Windows 上同时存在公司网络、系统代理、VPN、Tailscale 等网络环境时,“浏览器能不能访问某个网站”并不能直接说明流量到底走了哪里。

经常会出现这种情况:

  • 国内网站走公司网络
  • Google / ChatGPT 走系统代理
  • 某个程序绕过系统代理
  • Tailscale 存在,但并不是公网出口
  • 浏览器正常,命令行却走了另一条路径

这时候只查一个公网 IP 并没有太大意义。

我真正想知道的是:

我有哪些网络出口?
系统代理现在是什么?
每个网卡真正出去之后是什么公网 IP?
访问某个具体网站最终会走哪一个出口?

EgressProbe 就是把这些信息一次性收集起来,并给出一份可以直接看的结果。


2 使用方式

工具没有常驻窗口。

双击运行后:

EgressProbe.exe
读取网络、路由和代理配置
测试公网出口
判断指定网站使用的路径
生成 report.html
自动使用默认浏览器打开

看完报告以后直接关闭浏览器即可。

它不会修改代理、路由、网卡或任何系统网络配置,只负责检测。


3 报告内容

生成的报告主要分成几部分。

当前出口

展示当前公网 IP、国家 / 地区、运营商、ASN,以及这个 IP 更接近家庭 / 企业宽带、机房 VPS 还是移动网络。

系统代理

读取 Windows 系统代理配置,并尝试识别本地监听代理端口对应的进程。

例如可以看到:

系统代理:127.0.0.1:7688
代理进程:vpn07.exe
代理出口:United States

网站走哪个出口

针对配置中的域名逐个判断,例如:

百度          → China / 直连
Google        → United States / 代理
ChatGPT       → United States / 代理
OpenAI 鉴权   → United States / 代理

网卡与直连出口

程序会枚举本机网卡和路由,并尝试从不同本机源地址发起公网检测请求,得到每张网卡实际对应的公网出口。

这比只显示本机 192.168.x.x100.x.x.x 地址更有意义。


4 技术实现

项目使用 Go 1.26 编写,Windows 系统调用主要通过 golang.org/x/sys 完成。

为了尽量得到系统真实状态,网络部分没有依赖 ipconfigroute print 等命令行文本解析,而是直接使用 Windows API。

包括:

  • GetAdaptersAddresses
  • GetIpForwardTable2
  • GetExtendedTcpTable
  • CreateToolhelp32Snapshot

4.1 网卡和路由

通过 Windows API 获取完整网卡和路由表,再按照最长前缀匹配规则判断目标地址应走的接口。

这样可以处理多网卡、VPN、Tailscale 等同时存在的情况。

4.2 系统代理

系统代理从 Windows Internet Settings 中读取:

  • ProxyEnable
  • ProxyServer
  • AutoConfigURL
  • ProxyOverride

因此报告可以区分“默认路由会怎么走”和“启用了系统代理以后浏览器类请求会怎么走”。

4.3 代理进程识别

通过 TCP 监听表获得本机监听端口对应的 PID,再通过进程快照解析进程名称。

因此当系统代理配置为 127.0.0.1:xxxx 时,可以进一步告诉我这个端口究竟是哪一个程序开的。

4.4 公网 IP 探测

程序会分别:

  • 按默认路径请求公网检测服务
  • 绑定指定网卡源地址请求
  • 通过系统代理请求

然后比较返回的公网 IP。

公网信息使用多个公开服务,并带有失败回退,避免单个服务不可用导致整个报告失败。


5 为什么输出 HTML

EgressProbe 本身没有做传统桌面 GUI,而是把结果生成一份自包含的 report.html

HTML、CSS 和必要脚本都嵌入程序,运行时直接写出完整报告。

这样做有几个好处:

  • 网络诊断结果天然适合表格和卡片展示
  • 不需要为一次性报告维护复杂桌面 UI
  • 浏览器的排版和缩放体验更成熟
  • 生成后的报告可以单独保留
  • 主程序仍然可以保持非常轻量

这个设计也符合这个工具的使用方式:运行一次,看结果,然后退出。


6 配置

配置保存在:

%LOCALAPPDATA%\BeyondXinXin\EgressProbe\config\config.json

可以指定检测超时和需要判断出口的网站:

{
  "timeoutSeconds": 4,
  "routeTargets": [
    "baidu.com",
    "google.com",
    "chatgpt.com",
    "auth.openai.com"
  ]
}

运行数据统一位于:

%LOCALAPPDATA%\BeyondXinXin\EgressProbe\
├─ config\
├─ logs\
└─ report.html

7 项目总结

EgressProbe 不是 VPN 或代理工具,它不会帮用户改变网络。

它只做一件事:

把 Windows 当前实际存在的网络路径整理清楚。

这个项目对我最大的价值,是把过去需要用 ipconfig、路由表、代理设置、端口查看工具和多个公网 IP 网站分别确认的信息,合并成了一次检测。

源码:

https://github.com/BeyondXinXin/EgressProbe