代理端口被占用怎么办:7890 / 7897 / 1080 冲突原因、netstat 与 lsof 排查、改端口后同步系统代理
客户端启动时报「端口已被占用」「address already in use」,或者系统代理指向的端口没有任何程序在监听。本文解释 7890、7897、1080、9090 这些常见端口为什么会冲突,教你在 Windows 用 netstat、在 macOS / Linux 用 lsof 找到占用者,以及改端口之后必须同步的几个地方。
代理端口是什么
客户端在本机开一个端口,浏览器和其他软件把流量发到 127.0.0.1:端口,客户端再转发到节点。这个端口是客户端和系统之间唯一的接口,被别的程序占了,客户端要么启动失败,要么流量进了别人的门。
常见的默认端口:
| 端口 | 用途 | 默认使用它的软件 |
|---|---|---|
| 7890 | 混合 / HTTP 端口 | 原版 Clash、Clash for Windows、早期 Clash Verge、ClashX、OpenClash |
| 7891 | SOCKS 端口 | 原版 Clash |
| 7892 | Redir 端口 | Clash Linux 透明代理 |
| 7897 | 混合端口 | Clash Verge Rev 新版、Clash Party |
| 1080 / 1081 | SOCKS5 | v2rayN(1080)、Shadowsocks、NekoRay、部分开发工具 |
| 10808 / 10809 | SOCKS / HTTP | v2rayN 新版默认 |
| 2080 / 2081 | 混合 | sing-box 常见配置、NekoBox |
| 9090 / 9097 | 外部控制 API | Clash(9090)、Clash Verge Rev(9097) |
| 53 / 1053 | DNS 监听 | 客户端内置 DNS |
为什么会冲突
- 两个客户端同时运行。Clash Verge Rev 和 Clash for Windows 都开着,都要 7890;v2rayN 和另一个 SOCKS 工具都要 1080。最常见。
- 旧内核进程没退干净。上次关客户端时内核还活着,这次启动的新内核发现端口被「自己」占了。
- 卸载不干净的旧客户端。旧版本注册了开机自启或后台服务,每次开机先把端口占住。
- 与代理无关的软件。1080 是很多软件的默认 SOCKS 端口;9090 是 Prometheus、Cockpit 等运维工具的默认端口;某些游戏加速器、下载工具、开发环境也会用相近端口。
- 浏览器 / 系统的随机端口。极少数情况下系统给某个短连接随机分配到了这个端口,重启客户端就好。
- Windows 的端口保留范围。Hyper-V、WSL、Docker Desktop 会在系统里保留一大段端口(可用
netsh int ipv4 show excludedportrange protocol=tcp查看),恰好包含 7890 时客户端就无法绑定,而 netstat 里却看不到任何进程。
怎么查:Windows
打开 PowerShell 或命令提示符(管理员),输入:
netstat -ano | findstr :7897
输出每行最后一列是 PID。再用:
tasklist | findstr <PID>
就能看到进程名。或者直接打开任务管理器 → 详细信息,按 PID 排序找到它。
结束进程:
taskkill /PID <PID> /F
PID 是 4(System)说明端口被系统保留或被驱动占用,看上面第 6 条,用 netsh int ipv4 add excludedportrange 之外的办法——通常是改客户端端口更快。
怎么查:macOS / Linux
sudo lsof -i :7897
直接显示进程名、PID、用户。结束:
kill <PID>
# 不听话就
kill -9 <PID>
Linux 还可以用 ss -tlnp | grep 7897(比 netstat 更快,默认带进程名)。
查「所有正在监听的端口」用 lsof -iTCP -sTCP:LISTEN -P 或 ss -tlnp,能一次看清本机有哪些代理相关进程在跑。
怎么处理
分两种情况:
占用者是残留的代理进程(mihomo、clash、xray、sing-box、v2ray 等):直接结束它,重新启动客户端。如果每次开机都这样,去「任务管理器 → 启动应用」(Windows)或「系统设置 → 通用 → 登录项」(macOS)把旧客户端的自启动关掉,然后把它卸载干净。
占用者是别的正常软件:不要结束它,改客户端端口。
- Clash Verge Rev:设置 → 「端口设置」,改混合端口,建议选 7899、17890 之类不常见的。
- FlClash / Clash Party:设置 → 覆写 / 端口。
- v2rayN:设置 → 参数设置 → 本地监听端口。
- sing-box:配置 inbounds 里的
listen_port。 - 外部控制 API 端口(9090 / 9097)冲突时在同一页面改 external-controller 端口,不影响代理功能。
改端口之后必须同步的地方
端口改了,所有「写死了旧端口」的地方都要跟着改,否则表现是「客户端正常,但浏览器没网」:
- 系统代理。客户端一般会自动重写,没生效就关掉系统代理开关再打开。手动核对:Windows「设置 → 网络 → 代理」,macOS「系统设置 → 网络 → 详细信息 → 代理」,端口要是新值。
- 浏览器代理插件。SwitchyOmega / ZeroOmega 的情景模式里填的是旧端口,改成新端口或改用「系统代理」。
- 终端环境变量。
.zshrc/.bashrc里export https_proxy=http://127.0.0.1:7890要改;Windows 的用户环境变量同理。 - Git、npm、pip、Docker 等工具的代理配置。
git config --global http.proxy、~/.npmrc、pip.conf、Docker Desktop 的代理设置,各自改。 - 其他设备。手机或电视通过「允许局域网连接」走这台电脑的代理,它们填的端口也要改。
- PAC 文件。自定义 PAC 脚本里的端口。
Clash Verge Rev 从 7890 改到 7897 的那次版本更新造成了大量「更新后没网」的反馈,根源就是这一步没同步。类似现象的完整排查见连上了但打不开网页。
多个客户端共存的正确做法
有人确实需要两个客户端同时运行,比如一个日常用、一个测试订阅,或者 Clash 系客户端加一个 v2rayN 对比节点。这种情况不是不能做,而是要把端口错开,并且只让其中一个接管系统代理:
- 客户端 A 用 7897(混合)和 9097(API),客户端 B 改成 7899 和 9099,不要让任何一对端口相同;
- 两个客户端只开一个的系统代理开关,另一个关掉系统代理,浏览器需要测试时通过插件手动指向它的端口;
- 两个都不要开 TUN,TUN 虚拟网卡只能有一个在工作,两个同时开必然冲突;
- DNS 监听端口(53 / 1053)同理,只保留一个客户端的 DNS 劫持。
如果只是想换客户端,先把旧的卸载干净,再装新的,比共存省心得多。
局域网共享时的端口
客户端打开「允许局域网连接」后,其他设备通过这台电脑的内网 IP 加端口上网。这时端口不只是本机的事:
- 防火墙要放行这个端口的入站连接,否则其他设备连不上;
- 改了端口,所有连接过来的设备都要跟着改;
- 公司网络或校园网里开局域网共享,端口会暴露给同网段的所有人,最好开启客户端的认证(用户名密码)或者不开共享。
几个特殊情况
- 端口号小于 1024(比如 DNS 的 53)在 macOS / Linux 需要 root 或 cap_net_bind_service 权限,普通用户绑定失败也会报 permission denied 而不是 in use。客户端 DNS 监听端口改成 1053 之类的高位端口即可。
- IPv4 和 IPv6 分别监听。某些程序只占了
[::]:7890,netstat 过滤时注意带上 v6 地址。 - 防火墙规则绑定了旧端口。改端口后 Windows 防火墙可能需要重新允许一次。
- 路由器端。OpenClash 等路由器方案的端口与电脑客户端无关,但如果电脑同时开了客户端又把网关指向路由器,会出现双重代理,与端口冲突表现相似。路由器的问题见 OpenClash 问题排查。
速查
| 现象 | 做法 |
|---|---|
| 日志 address already in use | netstat / lsof 查占用,结束残留进程 |
| 占用者是别的正常软件 | 客户端改端口 |
| 改端口后没网 | 关开一次系统代理,查插件和环境变量 |
| netstat 查不到却绑定失败 | Windows 端口保留范围,换端口 |
| 每次开机都冲突 | 关掉旧客户端自启动,卸载干净 |
相关
Clash Verge Rev 教程 · v2rayN 教程 · sing-box 客户端教程
常见问题
为什么 7890 这么容易被占用?
7890 是原版 Clash 的默认混合端口,几乎所有 Clash 衍生客户端早期都用它。装过两个 Clash 系客户端,或者旧版没卸干净,就会撞上。
怎么知道是哪个程序占了端口?
Windows 用 netstat -ano | findstr 端口号 看 PID,再到任务管理器查;macOS / Linux 用 lsof -i :端口号,直接显示进程名。
改了客户端端口之后浏览器就没网了?
系统代理还指向旧端口。关掉再打开客户端的系统代理开关让它重写,并检查浏览器插件、终端环境变量里有没有写死旧端口。
1080 端口也会冲突吗?
会。1080 是 SOCKS5 的传统默认端口,v2rayN、Shadowsocks、部分下载工具和开发工具都可能用它。优先给代理客户端选一个冷门端口。
端口占用一定要解决吗,能不能忽略?
必须解决。端口被占内核就起不来,或者流量被发到了另一个程序,表现为连不上或行为诡异。
本文为信息整理与个人经验,不构成购买建议。机场政策与软件界面可能变化,以官方为准。发现过期内容请 联系纠错。