Windows 進程端口占用

端口占用

netstat -ano | findstr port/pid
協議 本地地址 外部地址 狀態 PID
TCP 0.0.0.0:3123 0.0.0.0:0 LISTENING 53368
TCP 127.0.0.1:3123 127.0.0.1:13777 ESTABLISHED 53368
TCP 127.0.0.1:13777 127.0.0.1:3123 ESTABLISHED 19292

本地地址與外部地址:因爲 TCP 是面向連接的。本地地址就是對應進程自己佔用的 IP 和端口,外部地址就是連接的遠端的 IP 和端口。

進程處理

如果有需要,可以通過 tasklist 進一步查看進程的信息

tasklist /fi "PID eq 35456"
-- OR
tasklist | findstr 35456
映像名稱                       PID 會話名              會話#       內存使用
========================= ======== ================ =========== ============
EasiNote.exe                 35456 Console                    1    196,392 K

或者通過 taskkill 殺死進程

/F 表示強制

taskkill /F /PID 35456
-- OR
taskkill /F /IM EasiNote.exe           -- 這個會殺死所有進程名爲 `EasiNote.exe` 的進程

端口保留

如果通過 netstat -ano 找不到佔用端口的進程,可以通過

netsh interface ipv4 show excludedportrange protocol=tcp

查看被系統保留的端口

C:\> netsh interface ipv4 show excludedportrange protocol=tcp

Protocol tcp Port Exclusion Ranges

Start Port    End Port
----------    --------
      5357        5357
      9800        9800
      9801        9801
     49671       49770
     49871       49970
     50000       50059     *

* - Administered port exclusions.

注意,標記 * 的爲 管理的端口排除(Administered port exclusions)

意思是:這些端口不會被系統保留,你可以自己用。
而其它沒有標記 * 號的表示:這些端口被系統保留了,你不能使用。

如果發現某個端口使用不了,而且沒有找到佔用的進程,那有可能這個端口,就是被系統保留了。

添加白名單

上面提到,如果端口是 Administered port exclusions,相當於系統白名單,這些端口是不會被系統保留的。

使用如下命令可以將端口添加到 Administered port exclusions

net stop winnat

netsh int ipv4 add excludedportrange protocol=tcp startport=4123 numberofports=5

netsh int ipv4 add excludedportrange tcp 4123 5 -- 簡化寫法

net start winnat

對應的,移除命令爲

netsh int ipv4 delete excludedportrange tcp 4123 5 

關於系統保留端口的更多詳情,可以參考:
hyper v - What is Administered port exclusions in windows 10? - Stack Overflow

參考文章

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