tcpdump 網絡封包分析教學:IT 人必學命令行診斷神器

# 用 tcpdump 捉網絡封包:IT 人必學嘅命令行診斷神器 做 IT 嘅你一定試過呢個情況:用户話個 application 好慢,但 ping 又正常、port 又通、server resource 又冇爆。咁點算?呢個時候就要出動 **tcpdump** —— Linux 網絡診斷嘅終極武器。 今日就同大家拆解 tcpdump 嘅常用技巧,由基本用法到進階 filter,包你睇完即刻用得...

tcpdump 網絡封包分析教學:IT 人必學命令行診斷神器 - 文章重點速覽 infographic

# 用 tcpdump 捉網絡封包:IT 人必學嘅命令行診斷神器

做 IT 嘅你一定試過呢個情況:用户話個 application 好慢,但 ping 又正常、port 又通、server resource 又冇爆。咁點算?呢個時候就要出動 **tcpdump** —— Linux 網絡診斷嘅終極武器。

今日就同大家拆解 tcpdump 嘅常用技巧,由基本用法到進階 filter,包你睇完即刻用得着。

## tcpdump 係乜嘢?

tcpdump 係一個命令行封包分析工具,可以即時擷取經過網絡介面嘅所有封包,然後顯示或者儲存做 pcap 檔案俾 Wireshark 分析。佢背後用嘅係 libpcap 庫,幾乎所有 Unix-like 系統都內置。

簡單嚟講:**tcpdump 就係你對眼**,俾你睇清楚網絡上面究竟發生緊咩事。

## 基本用法:tcpdump 入門三式

### 第一式:睇嚇有咩 interface 可以用

tcpdump -D

呢個 command 會列出曬所有可以用嚟 capture 嘅網絡介面。典型輸出會係咁:

1.eth0
2.lo (Loopback)
3.any (Pseudo-device that captures on all interfaces)
4.wlan0

揀好 interface 之後就可以開始捉包。

### 第二式:基本 capture

sudo tcpdump -i eth0

就係咁簡單!佢會即時顯示所有經過 eth0 嘅封包。不過呢個輸出會好快、好多,基本上睇唔切。所以要加 filter。

### 第三式:限制數量 + 唔 resolve DNS

sudo tcpdump -i eth0 -n -c 100

– `-n`:唔做 DNS reverse lookup(快好多,唔會卡住)
– `-c 100`:捉夠 100 個封包就停

## 進階 filter:精準捉你要嘅嘢

tcpdump 嘅 filter 語法係佢最強大嘅地方。以下係幾個實戰常用嘅 filter:

### 按 IP 地址 filter

# 只睇某個 source IP
sudo tcpdump -i eth0 -n src host 192.168.1.100

# 只睇某個 destination IP
sudo tcpdump -i eth0 -n dst host 10.0.0.50

# 睇曬來回兩個方向
sudo tcpdump -i eth0 -n host 192.168.1.100

### 按 Port filter

# 只睇 HTTP traffic(port 80)
sudo tcpdump -i eth0 -n port 80

# 只睇 HTTPS(port 443)
sudo tcpdump -i eth0 -n port 443

# 睇一個 port range
sudo tcpdump -i eth0 -n portrange 8000-8100

### 組合 filter:AND / OR

# 睇某個 IP 嘅 SSH traffic
sudo tcpdump -i eth0 -n host 192.168.1.100 and port 22

# 睇 HTTP 或者 HTTPS
sudo tcpdump -i eth0 -n 'port 80 or port 443'

# 排除 SSH 唔睇
sudo tcpdump -i eth0 -n not port 22

## 實戰案例:診斷 HTTP 慢嘅問題

假設你個 web server 響 10.0.0.10,用户投訴 load 得好慢。你可以咁做:

sudo tcpdump -i eth0 -n host 10.0.0.10 and port 80 -w /tmp/http_debug.pcap

`-w` 參數會將封包寫入 pcap 檔案,之後可以用 Wireshark 慢慢分析。捉大概 30 秒就夠,然後 Ctrl+C 停咗佢。

用 Wireshark 打開之後,去 Statistics → Flow Graph 就可以睇到 TCP 三次握手嘅時間、HTTP request/response 之間嘅 gap,一眼就睇到 bottleneck 喺邊。

## 進階技巧:tcpdump 實用參數組合

### 顯示封包內容(payload)

# -A 顯示 ASCII 內容(適合 HTTP 文字 protocol)
sudo tcpdump -i eth0 -n -A port 80

# -X 顯示 HEX + ASCII
sudo tcpdump -i eth0 -n -X port 80

### 只捉 SYN 封包(睇 connection attempt)

sudo tcpdump -i eth0 -n 'tcp[tcpflags] & (tcp-syn) != 0'

呢個好有用,可以即時睇到邊個 IP 嘗試連接你個 server。

### 捉特定 size 嘅封包

# 大過 1000 bytes 嘅封包
sudo tcpdump -i eth0 -n greater 1000

# 細過 64 bytes(通常係 control packet)
sudo tcpdump -i eth0 -n less 64

## tcpdump vs Wireshark:幾時用邊個?

| 場景 | 用邊個 |
|——|——–|
| Server 冇 GUI | tcpdump |
| 要即時 quick check | tcpdump |
| 深入分析 protocol | Wireshark |
| 要靚嘅圖表 | Wireshark |
| Remote server 捉包 | tcpdump + scp pcap 返嚟 |

實戰上最常見嘅 workflow 係:**ssh 入 server → tcpdump -w 捉包 → scp 個 pcap 落嚟 → Wireshark 分析**。

## 安全提醒

tcpdump 需要 root 權限先可以捉包。喺 production server 上面用嗰陣要小心:

– 唔好長時間 run,會食 CPU 同 disk
– 用 `-c` 限制封包數量
– 用 filter 縮窄範圍,避免捉太多唔關事嘅 traffic
– 捉完記得 delete 個 pcap 檔案,尤其係入面可能有 sensitive data

## 總結

tcpdump 係每個 IT 人必學嘅工具。佢唔需要 GUI、唔需要安裝額外套件,只要一條 command 就可以幫你睇穿網絡問題。記住呢幾個常用組合,下次遇到網絡問題就唔使靠估:

# 萬用 debug 組合
sudo tcpdump -i any -n -c 200 -w debug.pcap host <target_ip>

捉完返去用 Wireshark 分析,九成嘅網絡問題都無所遁形。下次再同大家分享 Wireshark 嘅進階分析技巧!