端口占用
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