解决 Windows 端口被随机占用

解决 Windows 端口被随机占用

1. 问题

有时开发的时候,会提示某些端口不能用。问题出现的非常随机,只能用重启解决。或者有时在WSL中监听的端口没法在主机上访问。如果使用netstat -ano查看也发现没有被占用。

2. 排查问题

Windows 中有一个TCP 动态端口范围。处在这个范围内的端口,有时候会被一些服务占用。在 Windows Vista之前,动态端口范围是 10255000。在 Windows Vista之后,新的默认起始端口为 49152,新的默认结束端口为 65535。如果安装了 Hyper-V,那么 Hyper-V 会为容器宿主网络服务随机保留一些端口号使用。

使用命令

Tera Term Macro
netsh int ipv4 show dynamicport tcp

可以查看目前「TCP 动态端口」的范围。

使用

Tera Term Macro
netsh int ipv4 show excludedportrange protocol=tcp

命令可以查看当前所有已经被Hyper-V占用了的端口。

3. 解决方案

只要重新设置一下TCP 动态端口范围,让 Hyper-V 只在设定的范围内保留端口即可。

使用管理员权限运行下面的命令,重设动态端口范围重新设定为 49152-65535

netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384

这个解决方法同样适用于某些软件无法监听1080端口的问题。

4. 其他命令

Tera Term Macro
# 禁用Hyper-V
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V

# 启动Hyper-V
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All

# 显示动态端口范围
netsh int ipv4 show dynamicport tcp
netsh int ipv4 show dynamicport udp

# 显示例外端口范围
netsh interface ipv4 show excludedportrange protocol=tcp
netsh interface ipv4 show excludedportrange protocol=udp

# 设置动态端口TCP范围
netsh int ipv4 set dynamicport tcp start=1024 num=13977

# 设置动态端口UDP范围
netsh int ipv4 set dynamicport udp start=1024 num=13977

# 添加例外端口
netsh int ipv4 add excludedportrange protocol=tcp startport=1024 numberofports=1
qrcode

创建时间:2023-03-15 01:01:24

最后修改:2023-03-15 01:06:57