windows nat driver总是停止,解决Windows端口占用问题
在我们开发web程序的时候,常常需要指定端口进行测试,但是在Windows下面,我们常常会遇到端口占用的相关问题,下面将展示端口占用的一些解决方法
1. 常规解决方案
a 查询端口
$ netstat -aon|findstr "8080" # 这里的8080即要查询的端口号
# 结果如下
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 19024
TCP 127.0.0.1:2736 127.0.0.1:8080 ESTABLISHED 8960
TCP 127.0.0.1:8080 127.0.0.1:2736 ESTABLISHED 19024
b 查询进程
$ tasklist|findstr "19024" # 这里的19024即进程号,根据a查到
# 结果如下
node.exe 19024 Console 1 267,456 K
c 关闭进程
$ taskkill /T /F /PID 19024 # 这里的19024为PID,根据b查到
# 结果如下
成功: 已终止 PID 19024 (属于 PID 14464 子进程)的进程
2. 查找不到对应端口号
有些时候,我们使用netstat
命令找不到对应端口占用的程序,这时因为这时候这些端口被用作了windows自己的保留端口。
每次开机,windows就会随机保留一些端口,原因如下
- 因为发现病毒活动而被微软屏蔽
- 安装过windows update以后,保留的端口发生变化
- 开启了
Hyper-V
特性 - ....
由于这些端口被保留,所以即使没有任何程序在使用,用户自己创建的程序也无法使用这些端口(为什么你的梯子常常提示提示端口占用,这就是原因)。
这些保留端口有一部分经常是8000及50000端口附近,所以经常会影响web开发,因为对于web来说,8080是一个常用的端口。
解决方法如下
a 重启电脑,直到需要的端口不在保留端口中
b 彻底解决
(1) 查看保留端口
通常上一步无法解决端口占用问题的话,这一步里面,需要的端口会在保留端口中,这里*
标注的代表这些范围内的端口不会被作为保留端口使用
$ netsh interface ipv4 show excludedportrange protocol=tcp
# 结果如下
协议 tcp 端口排除范围
开始端口 结束端口
---------- --------
1095 1194
1195 1294
1295 1394
1395 1494
1495 1594
2180 2279
2280 2379
2380 2479
2480 2579
2580 2679
3000 3000 *
3033 3132
3133 3232
8028 8028
8080 8080 *
8996 8996
10157 10256
10257 10356
10357 10456
10457 10556
10557 10656
10657 10756
50000 50059 *
55500 55599 *
* - 管理的端口排除。
(2) 排除端口
$ netsh int ipv4 add excludedportrange protocol=tcp startport=8081 numberofports=10
# 这里8081为开始的端口,10的意思为8081-8090这些端口全都要移出保留端口,如果只想8081不作为端口,那么10可以改成1
$ netsh interface ipv4 show excludedportrange protocol=tcp
# 再次查询,结果如下
开始端口 结束端口
---------- --------
1095 1194
1195 1294
1295 1394
1395 1494
1495 1594
2180 2279
2280 2379
2380 2479
2480 2579
2580 2679
3000 3000 *
3033 3132
3133 3232
8028 8028
8080 8080 *
8081 8090 *
8996 8996
10157 10256
10257 10356
10357 10456
10457 10556
10557 10656
10657 10756
50000 50059 *
55500 55599 *
3. IDEA无法启动
有时候,打开了IDEA,但是IDEA一直处于加载状态,始终进不去。
其实如果查看报错的日志的话,会看到与端口相关的报错提示,比如bindException
关键词,这也和windows保留端口有关系,这时候可以按照以下步骤操作
$ net stop winnat
Windows NAT Driver 服务已成功停止。
$ net start winnat
重启NAT服务,这时候重新打开IDEA,就可以正常启动了。
此外也可以参考步骤2,排除端口,这里的端口范围可以去IDEA官网查询
备注
1. 添加保留端口
上面的方法主要是如何排除保留端口,如果想要添加保留端口,让应用程序无法使用这些端口,可以参考微软官方的做法
2.Hyper
启用和禁用命令
# 禁用
dism.exe /Online /Disable-Feature:Microsoft-Hyper-V /All
# 启用
dism.exe /Online /Enable-Feature:Microsoft-Hyper-V /All