Linux netstat & ss 檢查網路連線與 Port

當你的網站連不上,或者想確認 Nginx 到底有沒有跑起來,你需要檢查 Listening Port (監聽埠)。 早期我們習慣用 netstat,但現在 Linux 發行版更推薦用效能更好的 ss (Socket Statistics)。 不過兩者的參數幾乎可以通用。

最強參數組合 (-tulpn)

兩個指令的參數幾乎一樣,背起來這串咒語就對了:tulpn

  • t: TCP 連線
  • u: UDP 連線
  • l: Listening (只顯示監聽中的,沒設的話會顯示所有連線狀態)
  • p: Program (顯示是哪個 PID/程式在佔用,需要 sudo)
  • n: Numeric (直接顯示 IP 和 Port 數字,不要反查 Hostname/Service Name,速度快很多)

範例:檢查誰在佔用 Port

sudo ss -tulpn
# 或
sudo netstat -tulpn

輸出範例:

Netid  State   Local Address:Port  Peer Address:Port  Process
tcp    LISTEN  0.0.0.0:80          0.0.0.0:*          users:(("nginx",pid=1234,fd=6))
tcp    LISTEN  0.0.0.0:22          0.0.0.0:*          users:(("sshd",pid=888,fd=3))

只要看到 LISTENLocal Address 是你要的 Port,就代表服務有正常啟動。

範例:搜尋特定 Port (搭配 grep)

sudo ss -tulpn | grep :80

統計連線狀態

當你的伺服器連線數暴增,想看看是不是被 DDoS,可以統計目前的連線狀態:

# 統計各種 TCP 狀態的數量 (ESTABLISHED, TIME_WAIT...)
ss -s

關於 netstat 未安裝

很多新版 Linux (如 Ubuntu 20.04+) 預設沒有 netstat。 雖然推薦用 ss,但如果你堅持要用,請安裝 net-tools

sudo apt install net-tools