7890 端口被占用或其他代理端口冲突,几乎都是同一客户端的旧进程没退干净,或另一个代理软件用了同一个端口。最快的办法是:用命令查出占用端口的进程并结束它;如果不方便结束,就在客户端里把端口改成一个没人用的数字,再重新开关一次系统代理。
问题表现
- 客户端提示「端口被占用」「端口 7890 已被使用」,内核无法启动;
- macOS / Linux 日志出现
listen tcp 127.0.0.1:7890: bind: address already in use; - Windows 日志出现
Only one usage of each socket address (protocol/network address/port) is normally permitted,或An attempt was made to access a socket in a way forbidden by its access permissions(后者多与系统保留端口有关); - 内核能启动,但系统代理指向的端口上其实是别的程序,网页全部打不开。
常见默认端口
| 客户端 | 常见默认端口(以实际设置为准) |
|---|---|
| 很多 Clash / Mihomo 配置文件 | 7890(混合或 HTTP)、7891(SOCKS)、9090(外部控制) |
| Clash Verge Rev | 7897(混合端口)、9097(外部控制) |
| v2rayN | 10808、10809 等(不同版本略有差异) |
如果你同时装了多个代理工具,它们很可能都在抢 7890。各客户端的特点和默认设置可以在《客户端大全》中对照。
可能原因与对应处理
| 原因 | 判断依据 | 处理方法 |
|---|---|---|
| 旧内核进程残留 | 占用者是 mihomo、verge-mihomo、clash 等 |
结束该进程 |
| 两个代理软件同时运行 | 占用者是另一款代理客户端 | 退出其中一个,或改端口 |
| 其他软件占用 | 占用者是开发工具、下载器、加速器 | 改用其他端口 |
| Windows 保留端口 | 查不到占用进程,但端口在保留区间内 | 换一个不在区间内的端口 |
排查方法
Windows 命令提示符(cmd)
netstat -ano | findstr :7890
tasklist /FI "PID eq 12345"
netsh interface ipv4 show excludedportrange protocol=tcp
第一条命令最后一列是进程 PID,第二条根据 PID 查进程名,第三条列出系统保留的端口区间。如果 7890 落在某个区间内,说明被系统保留,结束任何进程都无法释放。
Windows PowerShell
Get-NetTCPConnection -LocalPort 7890 -State Listen | Select-Object LocalAddress, OwningProcess
Get-Process -Id 12345
macOS 终端
lsof -nP -iTCP:7890 -sTCP:LISTEN
sudo lsof -nP -iTCP:7890 -sTCP:LISTEN
输出中的 COMMAND 是进程名,PID 是进程号。普通权限查不到时加 sudo 再查一次。
Linux 终端
sudo ss -ltnp | grep ':7890'
sudo lsof -nP -iTCP:7890 -sTCP:LISTEN
ss 输出的 users:(("进程名",pid=12345,...)) 就是占用者。
解决步骤
方法一:结束占用进程(确认是代理相关进程后再操作)
- Windows cmd:
taskkill /PID 12345 /F;PowerShell:Stop-Process -Id 12345 -Force;也可在任务管理器「详细信息」页按 PID 结束。 - macOS / Linux:
kill 12345,无法结束时用kill -9 12345,属于 root 的进程前面加sudo。 - 把
12345换成你查到的实际 PID,不要结束不认识的系统进程。
方法二:修改客户端端口
- 在客户端设置中把混合端口(或 HTTP / SOCKS 端口)改为未被占用的端口,例如 7899、17890;
- 保存后重启内核,具体位置可参考《Clash Verge Rev 教程》;
- 浏览器插件、终端环境变量或其他软件里手动填写过旧端口的,同步修改;
- 关闭并重新开启系统代理,确保系统代理指向新端口,详见《系统代理错误》。
方法三:处理 Windows 保留端口
最简单安全的做法是选一个不在保留区间内的端口。保留区间通常由 Hyper-V、WSL、Docker 等功能动态分配,重启后可能变化,所以建议选一个明显偏离区间的数字。
改端口后最容易忽略的是「系统代理还指向旧端口」,结果所有网页都打不开。改完记得重新开关一次系统代理。
验证结果
- 再次执行上面的查询命令,确认监听者是你的代理内核;
- 客户端正常启动,日志中没有端口相关报错;
- 在终端测试代理端口是否可用:
curl -I -x http://127.0.0.1:7899 https://www.google.com
Windows 用户在 PowerShell 中请写成 curl.exe,避免调用到同名别名。能返回 HTTP 状态码即说明端口工作正常。
其他方案
- 如果经常与其他软件冲突,可以改用 TUN 模式,但 TUN 同样需要内核正常启动,端口问题仍要先解决。
- 端口占用是本地问题,与机场无关,不需要联系机场客服。如果改完端口客户端依然打不开,继续看《代理客户端无法启动 / 闪退》。
常见问题
为什么重启电脑后 7890 又被占用了?
通常是客户端或另一款代理软件设置了开机自启,开机后先抢到了端口。检查系统的启动项,只保留一个代理客户端自启;或者干脆把端口改成一个不常用的数字。
查不到任何进程占用,但还是提示端口被占用?
Windows 上多半是端口落入了系统保留区间,用 netsh interface ipv4 show excludedportrange protocol=tcp 确认。macOS / Linux 上可能是权限不足看不到其他用户的进程,加 sudo 再查。
改了端口之后手机或局域网设备连不上?
局域网共享要用新端口,同时客户端需开启「允许局域网连接」。手机或其他设备里手动填写的代理端口也要一起改。
端口改成多少比较合适?
选 1024 以上、不在系统保留区间、也不与常用软件冲突的端口即可,例如 7899、17890。只要客户端、系统代理和其他设备填写一致,具体数字没有好坏之分。