用途与实际影响
这项功能怎样使用
为什么需要它
代理端口会变,浏览器、终端、TUN 和 Docker 又可能各走一条路径。先把这些当前事实分开列出,才能判断是多路径、手工钉死、旧环境变量,还是别的问题;仅看到一个端点字符串不能证明端口已死。
举个实际例子
“网页能打开,但 Docker 下载镜像一直超时,帮我先查当前设置。”AI查看系统代理、实际监听程序和 Docker 的配置与近期日志,指出两者是否使用不同路径。需要修改 Docker 时再进入它自己的设置确认,不把看到一个地址就当成代理已经失效。
最后我会得到什么
得到系统代理状态、实际提供代理的程序、当前网络路径,以及 Docker 的独立设置和未确认项。需要比较公网出口时另行确认;某个端口在运行不等于它能正常联网。
正常时
分别读到系统代理、提供端口的程序、网络路线和 Docker 自己的设置;查看本身不改网络。
发现问题时
Docker 保存了独立本地代理,或设置已改但运行记录仍沿用旧值时,提示要到 Docker 里另行核对。
入口不可用或证据不足时
没有安装 Docker 时只把该项写成未安装,其余网络状态仍可查看。
从哪里开始
双击“00-打开 ProxyClean.vbs”先看首页状态;需要端口、Docker 和路由细节时点“查看详情”。
需要准备什么
- 想弄清系统代理、端口还是某个应用的连接问题
从开始到拿到结果
- 1
打开即读状态
显示 Windows 手动代理是否开启和简短结论,不自动访问公网。
- 2
查看具体占用
详情区分监听端口、对应进程、默认路由和 Docker 独立设置。
- 3
按事实决定下一步
活端口、未覆盖的应用配置和未知范围会明说;只读查看不改变网络。
技术实现与依据
这里保留实现、关键条件、精确入口、历史记录和验证结果。
动态发现与 Docker 审计就绪;无硬编码端口表,支持 JSON 结构化输出关键规则与设计选择
坚持零固定端口表:完全根据系统的 Get-NetTCPConnection 动态判定哪些代理进程在监听。
将 Docker Desktop 纳入只读代理审计,但不把本地端点字符串升级成死端口或容器断网根因。
支持 -Json 参数,便于将网络拓扑与代理状态对接给自动化运维工具或上层脚本。
未加 -SkipExitProbe 时仅采集默认路径和 WinINET 发布端口的出口 IP;不测延迟,也不证明端到端稳定性。
本模块用到的名词
- Dynamic Port Sniffing(动态端口嗅探)
- 放弃静态配置列表,直接在系统 TCP 协议栈中按监听状态和进程签名动态发现活动代理端点。
- Docker Manual Pin(Docker 手工代理钉死)
- Docker 桌面版处于 manual 模式并保存了本地代理端点;这值得排查,但状态脚本不会进一步探测该端口是否已经死亡。
专业定义
只读看清当前代理路径和 Docker 配置,不把监听、路由或本地端点自动判成健康/死亡
解决什么
避免把固定端口表、一个监听记录、一个 fake-ip 路由或一条 Docker 配置各自误当成完整网络结论。
当前怎样实现
- Get-LocalProxyPorts 使用正规表达式提取 127.0.0.1、localhost 与 [::1] 端口,过滤合法范围 1-65535。
- Get-DockerProxySnapshot 检查 %APPDATA%\Docker\settings-store.json 中的 OverrideProxyHTTP 等覆盖项。
- 读取 %LOCALAPPDATA%\Docker\log\host\httpproxy.log 最近 10 分钟运行态日志,核验 Docker 运行时代理模式。
- 匹配常见代理核心进程名正则(clash|mihomo|sing-box|xray|v2ray|flyingbird|tag 等)。
- 分层诊断默认不写日志,Docker只读有界尾部且要求事件本身属于当前运行,文件mtime不替旧事件续期。出口比较只给匿名相同出口分组,不公开出口地址;同出口不证明同一客户端,HTTP成功也不证明绕过TUN。
执行流程
- 1
读取注册表获取 WinINET 当前系统代理端点与开启状态。
- 2
扫描 Get-NetTCPConnection 获取所有监听中的 TCP 连接,结合进程表识别代理核心进程名与 PID。
- 3
检查 IPv4 默认路由并列出 NextHop 落在 198.18/198.19 的条目;该状态脚本不判定这些路由生死。
- 4
读取 Docker Desktop 配置文件与日志,判定是否存在本地手动代理钉死或配置未生效挂起。
- 5
如果未加 -SkipExitProbe,发起网络探测检验出口连通性;最后汇总输出控制台表格或 JSON 对象。
边界
- 仅审计 Docker 配置文件与只读日志,绝不静默改写 settings-store.json 或强制重启 Docker Desktop。
- 监听候选来自实际 TCP Listen 记录;只发布 WinINET 端口或由代理进程名匹配且监听在回环/通配地址的记录,不枚举没有监听端口的进程。
- 出口探测只比较返回的 IP 字符串,不测延迟、速度、丢包或 DNS/WebRTC(网页实时通信)泄露。
失败与恢复
- Docker 配置文件存在但格式损坏或无法读取
- 返回 exists=true 与具体 error(错误)信息,不中断其余网络发现逻辑。
- 使用 -SkipExitProbe 或外部 IP 服务不可达
- current_default 保持 not_probed 或 unknown(未验证);本地配置清单仍可读,但不能推断真实出口。
真实入口
ProxyStatus.ps1动态状态探测与 Docker 审计脚本
如何验证
- ProxyClean.test.ps1 会运行 ProxyStatus -SkipExitProbe -Json,确认 schema(数据结构) 与 Docker 节点存在。
- 2026-09-14 当时的只读状态检查看到 Docker 桌面/容器均为 System、无手工本地钉死且近期 runtime(运行环境) mode 为 system;未执行出口探测。此结论不描述当前 Docker 状态。
与其他模块的关系
默认清理前的只读观察入口,也可单独用于解释为什么不同应用走了不同出口。
