Bean Network Tester

哪個程式正在使用這個連接埠?

伺服器無法在 8080 連接埠啟動,或測試以 "address already in use" 錯誤結束。不是已有程式佔用了該連接埠,就是 Windows 把它保留了,而這兩種錯誤看起來很像。以下說明如何分辨。

連接埠打不開的兩個原因

發生了什麼表現怎麼辦
有程式佔用連接埠錯誤訊息指出位址已被使用(EADDRINUSE,或 Windows 錯誤 10048)。該程式會出現在通訊端清單中。關閉該程式,或換一個連接埠。
Windows 保留了連接埠錯誤訊息指出存取被禁止(Windows 錯誤 10013),但並沒有程式在監聽。清單中沒有任何程式。換一個保留範圍之外的連接埠,或釋放該範圍。重新啟動 WinNAT 服務通常有效。

用 Windows 內建的工具

通訊端清單以處理程序 ID 表示擁有者。先找到連接埠,再查這個 ID:

netstat -ano | findstr :8080
tasklist /fi "PID eq 4321"

在 PowerShell 中同樣可以查,TCP 與 UDP 都行:

Get-NetTCPConnection -LocalPort 8080 | Select-Object LocalAddress, State, OwningProcess
Get-NetUDPEndpoint -LocalPort 5353 | Select-Object LocalAddress, OwningProcess
Get-Process -Id 4321

如果沒有程式佔用連接埠,就查看 Windows 保留了哪些範圍:

netsh int ipv4 show excludedportrange protocol=tcp

再用 protocol=udp 執行一次。保留範圍依通訊協定分別記錄,所以同一個連接埠可能對 UDP 是空閒的,對 TCP 卻被保留。

用 Tools 索引標籤

Tools 索引標籤不需要主控台就能回答同樣的問題:

所以結果是一張表,而不是簡單的「是」或「否」:Windows 依通訊協定分別保留範圍,監聽 IPv6 的程式可以佔著一個在 IPv4 上空閒的連接埠。

不會透過網路傳送任何內容。對每個連接埠,工具都在本機的迴路位址上向 Windows 申請它,然後立刻歸還。

知道是誰佔用之後

在任一表格中按右鍵點選某一列,即可把佔用該連接埠的程式設為目標。這只會填寫目標欄位,在你按下 START 之前不會有任何改變。接下來怎麼做,見只針對一個應用程式。

它不做什麼

它只讀取,不修復:從不關閉程式,也從不釋放保留範圍。屬於其他帳戶的通訊端不會顯示程式,除非該工具以系統管理員身分執行。

接下來

準備好故意搞壞自己的網路了嗎?

下載 Windows 版