Windows 端口异常的解决步骤

2023-11-15  本文已影响0人  alue

在 Windows 中,如果遇到端口无法正常使用的问题,首先会排查该端口是否被占用

netstat -aon | findstr 3200

大部分情况,都能定位到对应进程的 PID 号.

但有时候,上述指令找不到对应的进程,但端口的确是不能使用。

这个问题可能是 Windows 保留了某些端口,不让用户使用。可以使用下面的指令列出这些端口:

netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      3131        3230
      5357        5357
     50000       50099     *
     55500       55599
 
* - Administered port exclusions.

如果,我们的进程需要使用 3200 端口,就会报出下面的错误

ERROR  error when starting dev server:                                 
Error: listen EACCES: permission denied 127.0.0.1:3200

解决方法

大部分情况下,Windows 保留的端口是为 Hyper-V 准备的(也有其它的用途,例如 winnat 等,解决思路相同)。解决步骤就是先关闭 Hyper-V, 然后告诉系统保留我们需要的端口,然后再重启 Hyper-V.

1. 关闭 Hyper-V

三种方法:

方法 1 控制面板
方法 2 Powershell
Disable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V-All
方法 3 cmd
dism.exe /Online /Disable-Feature: Microsoft-Hyper-V

重启系统

2. 保留端口

例如,我们需要使用 3200 端口

netsh int ipv4 add excludedportrange protocol=tcp startport=3200 numberofports=1
3. 重启 Hyper-V

跟步骤 1 相同,同样对应三种方法。

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

这时候,检查端口排除:

netsh int ipv4 show excludedport tcp

协议 tcp 端口排除范围

开始端口    结束端口
----------    --------
        82          82
      3200        3200     *
     50000       50059     *

* - 管理的端口排除。

可以看出,3200 属于管理的端口排除,也就是说,用户可以使用的端口,Hyper-V 不会去占用这个端口。

如果,系统的端口保留不是因为Hyper-V,而是为了 winnat, 可以使用 net stop winnat 等命令,用相同的思路解决。

上一篇 下一篇

猜你喜欢

热点阅读