tcpdump 網絡排查實戰:由入門到進階嘅 CLI 封包分析教學

# tcpdump 網絡排查實戰:由入門到進階嘅 CLI 封包分析教學 做 IT 嘅你一定試過俾人話「個網絡好慢喎」,又或者「個 service 係咪死咗?」。呢個時候,與其靠估,不如直接睇下啲封包究竟發生咩事。**tcpdump** 就係 Linux 世界最經典嘅封包分析工具,今日就同大家由淺入深,學識點樣用 tcpdump 做網絡排查。 ## 乜嘢係 tcpdump? tcpdump 係一個命...

# 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教學 #技術分享

tcpdump 網絡排查實戰:由入門到進階嘅 CLI 封包分析教學 - 文章重點速覽 infographic