文章

代理启动提示端口被占用?监听地址与 PID 排查

代理启动提示“端口被占用”,先核对日志中的本机地址、端口、协议和错误码,再查询监听进程的 PID。PID 是进程编号,用来找到究竟哪个程序正在使用入口。此时本地监听可能尚未建立,反复切换远端节点通常无法解决同一地址上的绑定冲突。

本文面向 Windows 本机代理的启动故障。下面的命令只读取状态,不终止进程或修改设置。如果报错来自远端服务器,应在对应服务器检查,不能用本机进程信息解释远端占用。

先分清错误码,保留原始日志

日志里的 bind 表示程序尝试绑定本地地址。不要只保留界面上的“启动失败”,还要记录报错时间、TCP 或 UDP、具体地址与端口。

错误线索 含义与下一步
WSAEADDRINUSE/10048 地址已被使用;检查现有绑定及尚未完全关闭的连接
WSAEACCES/10013 访问被拒绝;可能涉及权限或独占绑定,不能简单等同于另一个普通监听进程
WSAEADDRNOTAVAIL/10049 请求的地址不适用;本地绑定场景应核对该地址是否仍属于本机

这些是 Windows Socket 错误的区别,并不是某个代理客户端的专属解释。依据:Microsoft Winsock 错误码

如果日志已经进入远端连接、证书验证或账号认证阶段,就应另行排查。证书问题可参考TLS 握手与信任链检查,不要继续用“端口占用”解释所有失败。

第一步:查询指定 TCP 端口的监听者

在 PowerShell 中,把示例端口替换为日志中的实际数字:

$proxyPort = 7890
Get-NetTCPConnection -State Listen |
    Where-Object LocalPort -eq $proxyPort |
    Select-Object LocalAddress, LocalPort, State, OwningProcess

7890 只是示例,不是所有客户端的默认端口。这里查询的是本机 TCP 监听,LocalAddress 和 LocalPort 是监听位置,OwningProcess 是所属进程编号。命令的字段与状态选项见 Get-NetTCPConnection 文档。

不要把某条已建立连接的 RemotePort 当成待查的本地监听端口。远端服务器使用 443,与本地代理是否能绑定自己的入口,是不同问题。

若没有结果,先确认端口没有抄错、查询时客户端处于什么状态,以及是否有权限读取。没有 Listen 记录,不等于已经证明该地址一定可以重新绑定;还可能需要结合连接关闭状态和原始错误继续检查。

第二步:按 PID 识别程序,再决定如何处理

取得 OwningProcess 后,查询对应进程:

Get-Process -Id 1234 |
    Select-Object Id, ProcessName

1234 必须替换为上一条命令实际返回的 PID。这个查询用于识别当前进程,不会结束它;参数含义见 Get-Process 文档。

随后对照任务管理器、程序安装位置和客户端日志,确认是另一个代理、同一软件重复启动的内核,还是需要保留的后台服务。进程可能已经退出或重新启动,操作前应重新查询,不能长期沿用截图中的编号。

查询结果 更合适的处理方向
自己刚重复启动的同一客户端 确认现有实例是否可用,再通过软件正常退出多余实例
另一个仍需使用的程序 为两个程序配置不同入口,分别保存原值
客户端的后台内核或服务 核对面板是否已连接这个后台,避免再次启动同端口内核
暂时无法识别的系统或组织服务 保留进程与错误记录,先查清用途再调整

关闭面板窗口后,重新查一次监听是否仍在,比仅凭托盘图标判断更可靠。确认确实是重复实例后,再按软件提供的正常退出方式处理。

第三步:地址和协议也要一起看

端口数字相同,不代表绑定条件完全相同。记录时应包含地址族、监听地址和协议。

监听地址 需要怎样理解
127.0.0.1 IPv4 回环地址,供本机访问
0.0.0.0 IPv4 通配监听,并非远端节点地址
::1 IPv6 回环地址
:: IPv6 通配监听;是否同时覆盖 IPv4 还要看双栈配置

微软文档说明,双栈通配套接字可能同时占用 IPv4 与 IPv6 对应端口;绑定能否共存还与具体地址和套接字选项有关。因此,不能看到 :: 就断言它与 IPv4 的报错无关。依据:地址复用与独占绑定

若日志指向 UDP,可分别查询该端口的 UDP 端点:

$proxyPort = 7890
Get-NetUDPEndpoint |
    Where-Object LocalPort -eq $proxyPort |
    Select-Object LocalAddress, LocalPort, OwningProcess

它显示本地 UDP 端点,不能代替 TCP 监听查询,也不能证明 UDP 数据已到达远端。依据:Get-NetUDPEndpoint 文档

只在本机使用代理时,应保持所需的本机访问范围;把地址改成通配监听,并不是通用的冲突修复方法,还会改变入口的监听范围。

改端口后,别遗漏使用这个入口的应用

确需改端口时,先记录原来的协议、地址和用途,再只修改发生冲突的入口。保存并重新加载后,确认启动日志不再出现该绑定错误,再查询实际监听。

还要区分 HTTP、SOCKS 和混合入口。以 Mihomo 为例,文档分别列出 port、socks-port 与 mixed-port,其中混合端口支持 HTTP(S) 和 SOCKS5。不要把多个独立监听项都随手设为同一端口。依据:代理端口说明

控制接口也有自己的用途。Mihomo 的 external-controller 是管理 API 监听地址,并不等同于给浏览器使用的代理入口。面板可以访问,不足以证明代理端口正常。依据:外部控制接口说明

完成修改后,按实际使用情况核对系统代理、浏览器独立设置、终端环境变量和应用内代理是否仍引用旧端口。回到同一个正常访问任务,检查客户端是否出现对应请求。终端验证方法可接着阅读Git 与 curl 的代理入口检查。

无法确定时,用这份记录继续反馈

记录项 填写内容
时间 启动报错与查询时间,注明时区
环境 Windows、客户端及内核版本
错误 原始错误码、TCP/UDP、绑定地址与端口
进程 当前 PID、程序名、是否为后台服务
修改 本轮只改了哪个入口,原值与新值是什么
结果 是否成功监听,使用方是否已更新并产生新请求

重启电脑就能解决吗?

重启可能暂时改变占用状态,但若两个程序仍在开机时争用同一入口,问题可能再次出现。优先找出重复实例或配置冲突,重启后的结果也应重新查询确认。

资料核对日期:2026-10-26。文中端口和 PID 均为示例,未对读者设备或任何节点进行实测。

评论

搜索文章

正在加载搜索…