# tcpdump 網絡排查實戰:由入門到進階嘅 CLI 封包分析教學
做 IT 嘅你一定試過俾人話「個網絡好慢喎」,又或者「個 service 係咪死咗?」。呢個時候,與其靠估,不如直接睇下啲封包究竟發生咩事。**tcpdump** 就係 Linux 世界最經典嘅封包分析工具,今日就同大家由淺入深,學識點樣用 tcpdump 做網絡排查。
## 乜嘢係 tcpdump?
tcpdump 係一個命令行封包擷取工具,可以即時擷取同顯示網絡介面上經過嘅封包。佢背後用嘅係 libpcap 庫,幾乎所有 Linux distribution 都預裝咗,唔使額外安裝。簡單嚟講,佢就係你嘅網絡顯微鏡。
## tcpdump 基本用法
最簡單嘅用法就係直接行 tcpdump,佢會顯示所有經過預設網絡介面嘅封包:
sudo tcpdump
不過咁樣會出好多嘢,睇到你眼花。所以我哋通常會加 filter 去縮窄範圍。
### 指定網絡介面
如果你部機有多過一個 network interface,可以用 `-i` 指定:
sudo tcpdump -i eth0
想睇下有咩介面可以用?行呢個:
sudo tcpdump -D
### 限制封包數量
用 `-c` 限制擷取封包數量,避免無窮無盡:
sudo tcpdump -c 10
## tcpdump Filter 實戰技巧
Filter 係 tcpdump 最強大嘅功能,等你可以精準擷取想要嘅封包。
### 按主機過濾
只睇某個 host 嘅 traffic:
sudo tcpdump host 192.168.1.100
只睇來源係某個 IP 嘅封包:
sudo tcpdump src host 192.168.1.100
只睇目的地係某個 IP 嘅封包:
sudo tcpdump dst host 8.8.8.8
### 按連接埠過濾
呢個係排查 service 問題最常用嘅技巧。例如你想睇曬所有 HTTP traffic:
sudo tcpdump port 80
睇 HTTPS:
sudo tcpdump port 443
想睇 SSH 連線:
sudo tcpdump port 22
仲可以指定來源埠或目的埠:
sudo tcpdump src port 8080
sudo tcpdump dst port 3306
### 按協議過濾
sudo tcpdump tcp
sudo tcpdump udp
sudo tcpdump icmp
### 組合 Filter
用 `and`、`or`、`not` 組合多個條件:
# 睇 192.168.1.100 嘅 HTTP traffic
sudo tcpdump host 192.168.1.100 and port 80
# 睇所有非 SSH 嘅 TCP traffic
sudo tcpdump tcp and not port 22
## 進階 tcpdump 選項
### 增加輸出詳細度
`-v`、`-vv`、`-vvv` 逐步增加輸出嘅詳細程度:
sudo tcpdump -vvv host 192.168.1.100
### 唔做 DNS 解析
預設 tcpdump 會嘗試將 IP 轉成 hostname,但呢個過程可能會拖慢擷取速度。用 `-n` 跳過 DNS 解析:
sudo tcpdump -n port 443
### 顯示封包內容
`-A` 以 ASCII 顯示封包內容(適合睇 HTTP 等文字協議):
sudo tcpdump -A port 80
`-X` 同時顯示 hex 同 ASCII:
sudo tcpdump -X port 80
### 儲存封包到檔案
用 `-w` 將封包儲存做 pcap 檔案,之後可以用 Wireshark 慢慢分析:
sudo tcpdump -w capture.pcap port 443
之後用 `-r` 讀返出嚟:
tcpdump -r capture.pcap
## 實戰場景:排查 Web Server 問題
假設你個 Nginx server 行緊喺 port 443,有 user 投訴連唔到。你可以咁樣排查:
### Step 1:確認有冇 traffic 到達
sudo tcpdump -i eth0 port 443 -c 20
如果有 SYN 封包到達但冇 SYN-ACK 回應,即係 firewall 或者 service 本身有問題。
### Step 2:檢查 TLS Handshake
sudo tcpdump -i eth0 port 443 -c 50 -n
留意 TLS handshake 係咪完整:Client Hello → Server Hello → Certificate → Server Hello Done → Client Key Exchange → Change Cipher Spec → Finished。如果中途斷咗,好可能係 TLS 設定或者憑證問題。
### Step 3:檢查特定 Client IP
sudo tcpdump -i eth0 host 203.0.113.50 and port 443 -vvv
咁樣你可以針對性咁睇某個 client 嘅連線過程,揾出問題所在。
## 實戰場景:排查 DNS 問題
DNS 問題好常見,tcpdump 可以幫你快速定位:
sudo tcpdump -i eth0 port 53 -n
留意 DNS query 有冇正常發出、response 有冇返嚟、response code 係咪正常(NOERROR vs NXDOMAIN vs SERVFAIL)。
## 實戰場景:排查 Database 連線問題
假設你個 application 連唔到 MySQL:
sudo tcpdump -i eth0 port 3306 -c 20 -n
睇下有冇 TCP SYN 發出、有冇收到 SYN-ACK。如果只得 SYN 冇回應,即係 database server 冇 listen 或者 firewall block 咗。
## tcpdump 常用組合 cheat sheet
| 場景 | 指令 |
|——|——|
| 睇 HTTP traffic | `tcpdump port 80 -A` |
| 睇 HTTPS traffic | `tcpdump port 443 -n` |
| 睇 DNS query | `tcpdump port 53 -n` |
| 睇 ICMP ping | `tcpdump icmp` |
| 儲存做 pcap | `tcpdump -w file.pcap` |
| 指定介面 | `tcpdump -i eth0` |
| 限制數量 | `tcpdump -c 100` |
| 詳細輸出 | `tcpdump -vvv` |
## 總結
tcpdump 係每個 Linux 系統管理員必學嘅工具。佢唔需要 GUI、唔使安裝額外套件,只要一條 command 就可以幫你睇穿網絡上發生嘅一切。記住幾個常用 filter 組合,下次遇到網絡問題就唔使靠估,直接 tcpdump 睇真相。
🔗 參考資料:NVD NIST 漏洞資料庫
當然,tcpdump 只係第一步。如果封包量好大,建議用 `-w` 儲存做 pcap 然後用 Wireshark 做深入分析。但喺冇 GUI 嘅 server 環境,tcpdump 就係你最可靠嘅排查利器。
#firewall #Linux #network #IT教學 #技術分享




