Linux tcpdump 網絡排查實戰:由入門到進階嘅封包分析技巧

# Linux tcpdump 網絡排查實戰:由入門到進階嘅封包分析技巧 做 IT 嘅你一定試過俾人話「個 server 連唔到」「個 service 好慢」,但係又冇 error log,點算好?呢個時候就要出動 **tcpdump** 喇。tcpdump 係 Linux 最強大嘅封包擷取工具,可以幫你喺網絡層面睇清楚到底發生咩事。今日就同大家分享幾個實戰常用嘅 tcpdump 技巧。 ## 乜...

# Linux tcpdump 網絡排查實戰:由入門到進階嘅封包分析技巧

做 IT 嘅你一定試過俾人話「個 server 連唔到」「個 service 好慢」,但係又冇 error log,點算好?呢個時候就要出動 **tcpdump** 喇。tcpdump 係 Linux 最強大嘅封包擷取工具,可以幫你喺網絡層面睇清楚到底發生咩事。今日就同大家分享幾個實戰常用嘅 tcpdump 技巧。

## 乜嘢係 tcpdump?

tcpdump 係一個 command-line 封包分析工具,可以即時擷取同顯示網絡介面上經過嘅封包。佢背後用嘅係 libpcap 庫,基本上所有 Unix-like 系統都內置咗。無論係排查連線問題、分析 DDoS 攻擊、定係 debug API timeout,tcpdump 都係你最好嘅朋友。

## tcpdump 基本用法

最簡單嘅用法就係直接行:

sudo tcpdump -i eth0

呢個 command 會顯示 eth0 介面上所有經過嘅封包。但係咁樣會出好多 noise,所以我哋通常會加 filter。

### 常用 Filter 技巧

**1. 指定 Host:**

sudo tcpdump -i eth0 host 192.168.1.100

淨係睇同某個 IP 有關嘅 traffic,雙向都包。

**2. 指定 Port:**

sudo tcpdump -i eth0 port 443

淨係睇 HTTPS traffic,排查 web server 問題必用。

**3. 組合 Filter:**

sudo tcpdump -i eth0 host 10.0.0.5 and port 3306

睇特定 server 嘅 MySQL 連線,排查 database connection 問題一流。

## tcpdump 進階實戰場景

### 場景一:排查 TCP 三次握手失敗

當 client 連唔到 server,你要確認係咪 firewall block 咗:

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

呢個 filter 淨係顯示 SYN 封包。如果你見到 SYN 發出但冇 SYN-ACK 返嚟,即係中間有 firewall drop 咗或者 server 冇 listen 嗰個 port。

### 場景二:分析 HTTP Request/Response

sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'

`-A` 會以 ASCII 顯示封包內容,`-s 0` 擷取完整封包(唔 truncate)。呢個 command 可以幫你睇到實際 HTTP request 同 response body,debug API 問題超有用。

### 場景三:儲存封包俾 Wireshark 分析

sudo tcpdump -i eth0 -w /tmp/capture.pcap host 10.0.0.1

`-w` 將封包寫入 pcap 檔案,之後可以用 Wireshark 慢慢分析。記住加 filter 限制範圍,如果唔係個 file 會好快爆。

### 場景四:監察 DNS Query

sudo tcpdump -i eth0 -n port 53

`-n` 唔做 DNS reverse lookup(避免 recursive DNS query 搞亂個 output)。呢個 command 可以幫你睇到 server 發出咩 DNS request,排查 DNS 解析問題。

## tcpdump 常用 Flags 速查表

| Flag | 用途 |
|——|——|
| `-i eth0` | 指定網絡介面 |
| `-n` | 唔做 DNS/hostname 解析 |
| `-nn` | 連 port name 都唔解析 |
| `-v / -vv / -vvv` | 顯示更多 detail |
| `-A` | 以 ASCII 顯示封包內容 |
| `-X` | 以 Hex + ASCII 顯示 |
| `-s 0` | 擷取完整封包(預設只擷頭 262144 bytes) |
| `-w file.pcap` | 寫入檔案 |
| `-r file.pcap` | 讀取檔案 |
| `-c 100` | 擷取 100 個封包後停止 |
| `-D` | 列出所有可用網絡介面 |

## 實用小貼士

1. **先用 `-c` 限制數量** — 喺 production server 行 tcpdump 之前,先用 `-c 10` 試下 filter 係咪正確,避免 overload。
2. **用 `tcpdump -D` 睇介面** — 唔好亂估 interface name,特別係新嘅 Linux distro 用 predictable naming(例如 `enp0s3`)。
3. **Combine 同 Wireshark** — tcpdump capture + Wireshark analyze 係黃金組合。tcpdump 喺 server 度 capture,Wireshark 喺 desktop 度分析。
4. **小心 permission** — tcpdump 需要 root 或者 `CAP_NET_RAW` capability。可以用 `sudo` 或者將 user 加入 `pcap` group。

## 總結

tcpdump 係每個 Linux admin 必須掌握嘅技能。由基本嘅 port filter 到進階嘅 TCP flag 分析,熟習咗之後排查網絡問題可以快十倍。下次遇到「個 server 好慢」嘅時候,唔好再靠估,直接開 tcpdump 睇下啲封包講緊咩!

🔗 參考資料:NVD NIST 漏洞資料庫

記住:**封包唔會講大話**。與其估估下,不如 capture 啲 data 出嚟分析。希望呢篇教學幫到你,有咩問題歡迎留言討論!

#Linux #firewall #IT教學 #server #技術分享

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