解决端口占用,hyper-v占用动态端口

常用命令

查找进程
netstat -ano|findstr “8080”

netsh
netsh interface ipv4 <show/add/delete>

第一种问题(普通端口占用)

1
2
3
4
5
6
7
8
9
10
11
# 查找进程
C:\Users\Administrator>netstat -ano | findstr "8080"
TCP 192.168.1.19:2759 120.232.31.225:8080 ESTABLISHED 20580
TCP [2409:8a5c:8224:8af0:95e7:b5f1:3324:35f4]:2761 [2409:8702:4860:100::4]:8080 ESTABLISHED 20580
TCP [2409:8a5c:8224:8af0:95e7:b5f1:3324:35f4]:2763 [2409:8c20:818:111::37]:8080 ESTABLISHED 20580
TCP [2409:8a5c:8224:8af0:95e7:b5f1:3324:35f4]:2765 [2409:8c54:871:3003::1d]:8080 ESTABLISHED 20580
TCP [2409:8a5c:8224:8af0:95e7:b5f1:3324:35f4]:2767 [240e:97c:2f:1003::17]:8080 ESTABLISHED 20580
TCP [2409:8a5c:8224:8af0:95e7:b5f1:3324:35f4]:2769 [240e:97c:2f:5::77]:8080 ESTABLISHED 20580

# 接着结束进程
C:\Users\Administrator>taskkill /t /f /im 进程号( !!!注意是进程号,不是端口号)

第二种(动态端口保留)

首先

1
2
# powershell
netstat -ano | findstr "8080"

没有结果,意味着并不是有程序占用了端口

盲猜hyper-v保留了端口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# powershell 

# 查看系统默认端口占用访问
netsh int ipv4 show dynamicport tcp

协议 tcp 动态端口范围
---------------------------------
启动端口 : 1024
端口数 : 13977

# 查看hyper-v启动后的保留端口范围
netsh interface ipv4 show excludedportrange protocol=tcp

协议 tcp 端口排除范围

开始端口 结束端口
---------- --------
1026 1125
1226 1325
1326 1425
1426 1525
1526 1625
2180 2279
...
# 通过这个可以查看被占用的项目端口是否在这个范围内

解决办法一

先以管理员身份打开 powershell,然后设置 tcp ipv4 的动态端口范围为 49152 开始的 16384 个端口,也就是 49152~65535

1
netsh int ipv4 set dynamicport tcp start=49152 num=16384

然后重启电脑。Hyper-V 就会从 49152~65535 范围内保留一部分端口,6942~6991 和 9090 不受影响。

查看一下此时的动态端口范围:

1
2
3
4
5
6
PS C:\Users\Administrator> netsh int ipv4 show dynamicport tcp

协议 tcp 动态端口范围
---------------------------------
启动端口 : 49152
端口数 : 16384

解决办法二

先以管理员身份打开 powershell,然后将 7890 等端口设置为排除端口给应用程序(clash)使用。

1
2
3
4
# 保留 6942~6951 这10个端口给应用程序使用
netsh int ipv4 add excludedportrange protocol=tcp startport=6942 numberofports=10
# 保留 7890 端口给应用程序使用
netsh int ipv4 add excludedportrange protocol=tcp startport=7890 numberofports=1

然后重启电脑。因为 9090 等端口被保留给应用程序使用了,Hyper-V 就无法将 9090 保留给自己使用了。

查看一下此时被保留的端口:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
PS C:\Users\Administrator> netsh int ipv4 show excludedport tcp

协议 tcp 端口排除范围

开始端口 结束端口
---------- --------
1578 1677
1678 1777
太多了这里省略...
7890 7890 *
太多了这里省略...
11301 11400
11401 11500
太多了这里省略...

* - 管理的端口排除。

带星号的就是被管理员保留的端口,可以被应用程序使用

如果要取消保留端口,可以:

1
netsh int ipv4 delete excludedportrange protocol=tcp startport=9090 numberofports=1