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
posted @ 2024-04-26 08:38  韩梦芫  阅读(117)  评论(0编辑  收藏  举报