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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章