问题诊断 · 客户端

代理端口被占用怎么办: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
7891SOCKS 端口原版 Clash
7892Redir 端口Clash Linux 透明代理
7897混合端口Clash Verge Rev 新版、Clash Party
1080 / 1081SOCKS5v2rayN(1080)、Shadowsocks、NekoRay、部分开发工具
10808 / 10809SOCKS / HTTPv2rayN 新版默认
2080 / 2081混合sing-box 常见配置、NekoBox
9090 / 9097外部控制 APIClash(9090)、Clash Verge Rev(9097)
53 / 1053DNS 监听客户端内置 DNS

为什么会冲突

  1. 两个客户端同时运行。Clash Verge Rev 和 Clash for Windows 都开着,都要 7890;v2rayN 和另一个 SOCKS 工具都要 1080。最常见。
  2. 旧内核进程没退干净。上次关客户端时内核还活着,这次启动的新内核发现端口被「自己」占了。
  3. 卸载不干净的旧客户端。旧版本注册了开机自启或后台服务,每次开机先把端口占住。
  4. 与代理无关的软件。1080 是很多软件的默认 SOCKS 端口;9090 是 Prometheus、Cockpit 等运维工具的默认端口;某些游戏加速器、下载工具、开发环境也会用相近端口。
  5. 浏览器 / 系统的随机端口。极少数情况下系统给某个短连接随机分配到了这个端口,重启客户端就好。
  6. 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)把旧客户端的自启动关掉,然后把它卸载干净。

占用者是别的正常软件:不要结束它,改客户端端口。

改端口之后必须同步的地方

端口改了,所有「写死了旧端口」的地方都要跟着改,否则表现是「客户端正常,但浏览器没网」:

  1. 系统代理。客户端一般会自动重写,没生效就关掉系统代理开关再打开。手动核对:Windows「设置 → 网络 → 代理」,macOS「系统设置 → 网络 → 详细信息 → 代理」,端口要是新值。
  2. 浏览器代理插件。SwitchyOmega / ZeroOmega 的情景模式里填的是旧端口,改成新端口或改用「系统代理」。
  3. 终端环境变量。.zshrc / .bashrc 里 export https_proxy=http://127.0.0.1:7890 要改;Windows 的用户环境变量同理。
  4. Git、npm、pip、Docker 等工具的代理配置。git config --global http.proxy、~/.npmrc、pip.conf、Docker Desktop 的代理设置,各自改。
  5. 其他设备。手机或电视通过「允许局域网连接」走这台电脑的代理,它们填的端口也要改。
  6. PAC 文件。自定义 PAC 脚本里的端口。

Clash Verge Rev 从 7890 改到 7897 的那次版本更新造成了大量「更新后没网」的反馈,根源就是这一步没同步。类似现象的完整排查见连上了但打不开网页。

多个客户端共存的正确做法

有人确实需要两个客户端同时运行,比如一个日常用、一个测试订阅,或者 Clash 系客户端加一个 v2rayN 对比节点。这种情况不是不能做,而是要把端口错开,并且只让其中一个接管系统代理:

如果只是想换客户端,先把旧的卸载干净,再装新的,比共存省心得多。

局域网共享时的端口

客户端打开「允许局域网连接」后,其他设备通过这台电脑的内网 IP 加端口上网。这时端口不只是本机的事:

几个特殊情况

速查

现象做法
日志 address already in usenetstat / 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、部分下载工具和开发工具都可能用它。优先给代理客户端选一个冷门端口。

端口占用一定要解决吗,能不能忽略?

必须解决。端口被占内核就起不来,或者流量被发到了另一个程序,表现为连不上或行为诡异。


本文为信息整理与个人经验,不构成购买建议。机场政策与软件界面可能变化,以官方为准。发现过期内容请 联系纠错。

继续阅读

回到 问题诊断 · 机场推荐 2026 · 排行榜