← 返回所有文章

查詢本機開放 Port(監聽中)

UtilsPort網路LinuxWindowsMacnetstatsslsofkill作者:VincentCorgi約 1 分鐘閱讀

功能

說明如何在 Linux、Windows、Mac 列出 正在監聽的 port、查 誰佔用某個 port,以及必要時 結束佔用 process

情境

  • 要啟動服務卻出現「port 已被使用」、或懷疑本機開了不必要的監聽時,用此篇對照 ssnetstatlsof 或 Windows 指令。
  • 安全盤點或除錯 API/資料庫連線時,確認實際聽在哪個 port、是否只綁本機。

Linux

列出所有監聽中的 TCP port(含 process)

Code
sudo ss -tlnp
  • -t TCP
  • -l listening
  • -n 數字顯示 port(不解析服務名)
  • -p 顯示 process

僅 UDP 監聽

Code
sudo ss -ulnp

查詢特定 port 是否在監聽

Code
sudo ss -tlnp | grep :<port>
# 例:查 8080
sudo ss -tlnp | grep :8080

使用 netstat(若無 ss)

Code
sudo netstat -tlnp
sudo netstat -tlnp | grep :<port>

使用 lsof

Code
sudo lsof -i -P -n | grep LISTEN
sudo lsof -i :<port>

釋放(kill)佔用某 port 的 process

先查出 PID(例如用上面 sslsof -i :<port>),再終止:

Code
kill <pid>
# 若無法結束可強制
sudo kill -9 <pid>

Windows

列出所有監聽中的 port(含 process 名稱)

Code
Get-NetTCPConnection -State Listen | Select-Object LocalAddress, LocalPort, @{Name="ProcessName";Expression={(Get-Process -Id $_.OwningProcess).Name}}

僅列出 LISTENING(netstat)

Code
netstat -ano | findstr LISTENING

查詢特定 port 是否被使用

Code
netstat -ano | findstr :<port>
# 或
netstat -an | findstr ":<port>"

依 PID 查 process 名稱

Code
tasklist /fi "PID eq <pid>"

終止佔用某 port 的 process

先用 netstat -ano | findstr :<port> 取得最後一欄的 PID,再執行:

Code
taskkill /PID <pid> /F

/F 為強制結束。


Mac

列出所有監聽中的 port(含 process)

Code
lsof -i -P -n | grep LISTEN
  • -i 網路
  • -P port 以數字顯示
  • -n 不解析 hostname

僅 TCP 監聽(netstat)

Code
netstat -an -p tcp | grep LISTEN

查詢特定 port 誰在佔用

Code
lsof -i :<port>
# 例:8080
lsof -i :8080

依 PID 查 process

Code
ps -p <pid> -o comm=

釋放(kill)佔用某 port 的 process

先用 lsof -i :<port> 取得 PID,再終止:

Code
kill <pid>
# 若無法結束可強制
kill -9 <pid>