Clash提示本地端口被占用:监听地址、进程归属与端口用途分别核对
使用Windows只读TCP监听和进程查询定位本地端口占用,区分HTTP、SOCKS、Mixed与控制API入口,并按已有实例、其他服务或无结果选择后续核查。
Clash相关客户端启动时提示本地端口被占用,先查的是这台电脑上的监听冲突,不是远端网站、节点延迟或订阅质量。一个端口数字必须和协议、监听地址、用途一起看。把HTTP代理入口误写成控制API端口,或者同时启动两套内核,都可能让排查绕远。本文用Windows的只读查询说明怎样查出当前占用者,再决定由谁调整;不提供结束未知进程、开放所有网卡或关闭防火墙的快捷做法。

先抄准确错误与目标端口,别先改全局设置
从客户端当前错误里记下冲突地址、端口和发生动作。例如虚构提示指向“127.0.0.1:7890”,发生在点击启动以后。随后查看当前客户端显示的实际代理端口和内核类型,确认这次要启动的是哪套配置。本文中的7890只是示例,不能因为教程这样写,就把自己配置中不同的数字全部改成7890。
如果错误说的是无法绑定地址,与地址已被使用也应分别记录;若错误里是另一个端口,就查询那个端口。某些桌面程序由界面进程和后台内核组成,窗口关闭不一定代表后台服务停止。任务栏只剩一个图标,也不能证明电脑里只有一个监听实例。先保留这些观察,不急着重装或重置系统网络。
分清代理入口和控制入口,不把9090当上网端口
以Mihomo维护者的代理端口文档为例,port是HTTP代理端口,socks-port是SOCKS入口,mixed-port可供支持HTTP或SOCKS的程序使用。它们不是同一个字段的不同名字;配置的具体数字也不是所有Clash客户端统一固定。使用其他内核或封装客户端时,应先核对它的兼容字段和界面映射,不能直接照抄另一分支配置。
控制API则用于管理内核,相关字段是external-controller。维护者的全局配置说明将它与代理端口分开介绍,示例中出现的9090不能因此填写到浏览器的HTTP代理端口栏。面板能打开不代表应用流量已经通过代理,代理能监听也不代表控制面板必须能访问。先写清“这个端口给谁连接、承担什么用途”,再查有没有冲突。
| 要核对的项 | 示例记录 | 不能混写为 |
|---|---|---|
| 代理入口 | 本次配置的mixed-port为7890 | 所有客户端默认都是7890 |
| 控制入口 | 本次控制API另用一个本地端口 | 面板端口就是浏览器代理端口 |
| 监听地址 | 127.0.0.1 | 公网地址或另一台电脑的地址 |
只查本机TCP监听,保留地址和进程号
在自己的Windows电脑打开PowerShell,先运行下面的只读查询。将示例端口替换为错误中准确的数字。命令只查看本机当前TCP监听,不向陌生服务器探测,也不会修改配置。微软的Get-NetTCPConnection文档列出了本地端口、状态与归属进程等属性。
Get-NetTCPConnection -LocalPort 7890 -State Listen |
Select-Object LocalAddress, LocalPort, State, OwningProcess
假设练习输出是一行:本地地址127.0.0.1、本地端口7890、状态Listen、归属进程4321。这只表示该时刻有这个进程监听对应入口;不能单凭4321或端口号认出它属于哪个软件。数字会随进程重新启动而改变,所以应接着查询,不要拿上周截图里的进程号处理今天的程序。
地址也要一起看。127.0.0.1是本机回环地址,IPv6回环通常写作::1;0.0.0.0或::指向更广的监听范围,但外部是否真正可达还受到系统路由与防火墙等条件影响。发现地址范围与原计划不一致,应交给负责配置的人复核,不要为了消除报错就把地址改成所有网卡。IPv4和IPv6出现多行并不自动等于两个不相关程序占用。
把监听记录接到进程名称,仍然先识别再操作
可将这次监听的归属进程号去重,再用Get-Process查询名称。下面没有终止或重启命令;变量使用独立名称,避免覆盖PowerShell表示当前进程的自动变量。
$portRows = @(Get-NetTCPConnection -LocalPort 7890 -State Listen)
$portRows | Select-Object -ExpandProperty OwningProcess -Unique |
ForEach-Object { Get-Process -Id $_ | Select-Object Id, ProcessName }
微软的Get-Process说明支持按进程ID读取运行中的进程。得到名称后,再对照自己启动的客户端、服务说明或任务管理器信息确认归属。名称接近并不是发布者或版本证明;不确定的系统服务、公司软件和他人任务不要随意结束。若查询时进程已经退出,重新查一次当前监听,不把旧进程号永久当成那个软件的身份。

根据占用者决定下一步,不必一律换端口
若识别为自己早先启动的同一套内核,先确认当前实例是否就是正在使用的实例。有时第二次启动报冲突,但第一次仍正常监听;这时不能因为新窗口红字就认定原实例也失效。查看正常客户端的状态与已知用途,避免再启动第三个实例。确需收起重复实例时,通过已识别客户端的正常退出入口处理,并确认没有其他业务依赖。
若占用者是另一项必须保留的本机服务,应由有权配置者为两者分配不同入口。改变代理端口后,所有手动填写旧端口的应用也需要对应核对;只改配置文件一处,浏览器仍指向旧数字,表面就会变成“启动成功却不能用”。此时可用本站首次设置说明梳理实际使用的入口,但不要顺手改变与本次冲突无关的规则和订阅。
若命令没有匹配结果,先读清输出或错误。它只能说明本次查询未取得该端口的TCP监听,不证明端口永远空闲。程序可能刚退出、冲突只在启动瞬间发生,提示也可能涉及UDP、地址权限或系统保留范围。记录时间并让错误再现后低频复查;不要因为查不到一行就认定报错是假的,更不要用禁用安全功能来验证猜测。
一份完整样例与通过标准
填写好的虚构样例:“预期入口为本机mixed-port 7890;第二次启动提示地址占用;当前TCP监听在127.0.0.1:7890,进程号4321;查询名称后,经本机已知实例信息确认是先前启动的内核;未修改监听地址,未结束未知程序。”这份记录将期望、错误与占用者连起来,比写一句“7890坏了”更容易继续处理。
处理后的验收分两步:先确认计划保留的实例能稳定启动、目标入口由预期进程监听,重复启动问题不再出现;再用自己有权访问的普通公开页面检查实际应用是否指向正确的代理入口。监听成功只是本地入口条件,不等于DNS、远端连接和页面响应都正常。需要继续查看后续网络阶段时,再进入本站网络连接排查指南,不要把几种问题混成一次大范围重置。

常见问题:已建立连接和监听是不是同一个状态
不是。本文筛选的是Listen,也就是等待连接的本地入口;Established表示已经建立的连接。若没有筛选状态,看到某个程序与远端使用443端口通信,不能据此说它抢占了本机7890。读取结果时把LocalPort和RemotePort列分清,不要只在输出里搜索一个数字就下结论。多个应用连接同一个代理入口,也不等于每个应用都在争当该入口的监听者。
为什么有客户端窗口,却查到另一个进程名称?
图形界面可能把实际网络工作交给后台内核或服务。先根据客户端自己的内核说明核对这种关系,再看任务管理器中的对应实例。不能因为名称与窗口标题不同就判断它是异常程序,也不要把一个软件的多个辅助进程全部当成重复内核。问题处理记录应写到具体监听进程,而不是笼统写“关闭了几个窗口”。