近来开发,在启动程序时,会遇到类似错误,导致程序起不来:
Error: listen EACCES: permission denied 0.0.0.0:7001
网上查了一下,说是 windows 为 Hyper-V 保留的端口号,所以不能使用。这个保留区间是不固定的,所以有时重启机器后又可以用了。可用如下命令查看保留了哪些端口号:
> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
5357 5357
6180 6279
6280 6379
6380 6479
6480 6579
6680 6779
6780 6879
6880 6979
6980 7079
7102 7201
7202 7301
49719 49818
50000 50059 *
50060 50159
50260 50359
50560 50659
52733 52832
52833 52932
52943 53042
53143 53242
* - Administered port exclusions.
发现 7001 确实在这个保留的范围内。又查到说是可用如下命令限定这个保留区间(以管理员身份执行):
net stop winnat
netsh int ipv4 set dynamic tcp start=49152 num=16384
netsh int ipv6 set dynamic tcp start=49152 num=16384
net start winnat
执行后,确实变了:
> netsh interface ipv4 show excludedportrange protocol=tcp
Protocol tcp Port Exclusion Ranges
Start Port End Port
---------- --------
5357 5357
50000 50059 *
* - Administered port exclusions.
但是觉得跟这命令中写的端口号范围没有关系!改了 start 和 num 重新执行这些命令,发现还是 5357 和 50000 到 50059。
不知道以后会怎么样,看来若是碰到这种情况,重启一下 winnat 可能会好。
网友评论