在Windows下开发,偶尔会出现端口被占用,却找不到占用端口的程序。这是因为开启Hyper-V后,系统会随机保留部分端口。

在开发过程中,编译web项目提示端口没有权限

image-SKIxKzUmCdhJuPZgsHkDUhiCwiKYjXKa.png

用命令查找

netstat -ano | findstr ":8888"

没有输出结果

这是因为在开启Hyper-V后系统会随机保留一些端口

检查保留端口范围:

netsh int ipv4 show dynamicport tcp

image-unoZcWuzTQnJQAUquygRZKFcZcEGaXfS.png

查看当前被占用的端口

netsh interface ipv4 show excludedportrange protocol=tcp

image-csDNMPbJWICALhjUwZRTzXtqDxuwWaGj.png

发现8888在这个端口范围内,被占用。

若目标端口在保留范围内,需修改动态端口分配:

netsh int ipv4 set dynamicport tcp start=49152 num=16384
netsh int ipv4 set dynamicport udp start=49152 num=16384
netsh int ipv6 set dynamicport udp start=49152 num=16384

netsh int ipv4 set dynamic tcp start=55000 num=10536
netsh int ipv6 set dynamic tcp start=55000 num=10536

重启系统,再次输入上面命令查看保留的端口

image-aPzzCfbjCjbAFHdVouQZBkiRRWVLqDxn.png

image-BtkFJfWCHQlApEFpniLYDnXgUwtZlVBj.png

这时8888端口可以使用,以后再也不会系统保留了。