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

# Linux 網絡排查神器 tcpdump 實戰教學:由入門到進階嘅封包分析技巧 做 IT 嘅你一定試過呢個場景:個客打嚟話「個網站好慢喎」,你 check 完 CPU、memory、disk 全部正常,Apache/Nginx log 又冇 error,咁點算?呢個時候就要出動網絡排查神器 — **tcpdump**。 tcpdump 係 Linux 入面最強大嘅封包擷取工具,可以即時 cap...

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

做 IT 嘅你一定試過呢個場景:個客打嚟話「個網站好慢喎」,你 check 完 CPU、memory、disk 全部正常,Apache/Nginx log 又冇 error,咁點算?呢個時候就要出動網絡排查神器 — **tcpdump**。

tcpdump 係 Linux 入面最強大嘅封包擷取工具,可以即時 capture 網絡流量,幫你睇清楚每一個 TCP 握手、HTTP request、DNS query 嘅細節。今日就同大家由淺入深,實戰學識點樣用 tcpdump 排查網絡問題。

## 乜嘢係 tcpdump?

tcpdump 係一個 command-line 嘅封包分析工具,背後用 libpcap 庫嚟擷取網絡介面上嘅所有 traffic。佢可以即時顯示封包內容,亦可以將結果 save 做 pcap 檔案,之後再用 Wireshark 慢慢分析。

基本語法好簡單:

tcpdump -i eth0

呢個 command 會 capture eth0 介面上所有經過嘅封包。但係喺 production server 上面咁樣行,畫面會瘋狂 scroll,根本睇唔切。所以實戰入面一定要加 filter。

## tcpdump 常用 Filter 實戰

### 1. 按 Port 過濾

最常用嘅 filter 就係指定 port。例如你想睇曬所有 HTTP traffic:

tcpdump -i eth0 port 80

想睇 HTTPS 嘅話:

tcpdump -i eth0 port 443

如果你淨係想睇由某個 source port 發出嘅 traffic,可以用 `src port`:

tcpdump -i eth0 src port 8080

### 2. 按 Host 過濾

當你懷疑某部機嘅 traffic 有問題,可以指定 host:

tcpdump -i eth0 host 192.168.1.100

呢個 command 會 capture 所有同 192.168.1.100 有關嘅封包(包括 incoming 同 outgoing)。想再精準啲,可以用 `src host` 或 `dst host`:

# 淨係睇由 192.168.1.100 發出嘅封包
tcpdump -i eth0 src host 192.168.1.100

# 淨係睇發去 192.168.1.100 嘅封包
tcpdump -i eth0 dst host 192.168.1.100

### 3. 組合 Filter

tcpdump 支援用 `and`、`or`、`not` 組合多個條件。例如你想睇由某部機發出、去 port 443 嘅 traffic:

tcpdump -i eth0 src host 10.0.0.5 and dst port 443

又或者你想排除 SSH traffic(port 22),專心睇其他嘢:

tcpdump -i eth0 not port 22

## 進階技巧:分析 TCP 握手問題

網站慢嘅其中一個常見原因係 TCP 握手 latency 高。你可以用 tcpdump 睇清楚三次握手嘅時間:

tcpdump -i eth0 -nn 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

`-nn` 參數會 skip DNS lookup 同 port name resolution,加快顯示速度。呢個 filter 淨係顯示 SYN 同 FIN 封包,幫你快速判斷:

– 如果見到 SYN 發出但冇 SYN-ACK 返嚟 → 可能 firewall block 咗
– 如果 SYN 同 SYN-ACK 之間時間好長 → 網絡 latency 高
– 如果見到大量 SYN 但冇完成握手 → 可能係 SYN flood attack

## 將結果 Save 做 PCAP 檔案

有時你需要將 capture 結果留低俾同事分析,或者用 Wireshark 開嚟慢慢睇:

tcpdump -i eth0 -w /tmp/capture.pcap port 443

`-w` 參數會將 raw packet data 寫入檔案。之後你可以用 `-r` 讀返出嚟:

tcpdump -r /tmp/capture.pcap

## 實戰案例:排查 HTTPS Connection Reset

假設你個網站間唔中出現 “Connection Reset” error,你可以咁樣排查:

tcpdump -i eth0 -nn 'tcp port 443 and (tcp[tcpflags] & tcp-rst != 0)'

呢個 command 淨係 capture 帶 RST flag 嘅 TCP 封包。如果見到大量 RST,可能係:

1. **Backend server 死咗** — 檢查 upstream service 係咪正常
2. **SSL/TLS 版本唔夾** — 檢查 server 同 client 嘅 TLS 設定
3. **Load balancer timeout** — 檢查 keepalive 設定

## 常用 tcpdump 參數速查表

| 參數 | 用途 |
|——|——|
| `-i eth0` | 指定 network interface |
| `-nn` | 唔做 DNS + port name lookup |
| `-v / -vv / -vvv` | 顯示更多 detail(verbose) |
| `-w file.pcap` | 寫入檔案 |
| `-r file.pcap` | 讀取檔案 |
| `-c 100` | 淨係 capture 100 個封包 |
| `-A` | 以 ASCII 顯示封包內容 |
| `-X` | 以 Hex + ASCII 顯示封包內容 |
| `-s 0` | Capture 完整封包(唔 truncate) |

## 總結

tcpdump 係每個 Linux admin 必學嘅工具。由基本嘅 port/host filter,到進階嘅 TCP flag 分析,掌握咗佢你就可以喺網絡問題出現時快速定位 root cause。記住:下次個客話網站慢,唔好即刻 reboot server,開個 tcpdump 睇清楚先!

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

**Pro tip:** 喺 production 環境用 tcpdump 嗰陣,記得加 `-c` 限制封包數量,或者用 filter 縮窄範圍。唔好喺 busy server 上面行 `tcpdump -i any` 冇 filter,會拖慢成部機㗎!

#技術分享 #SSL #firewall #SSH #IT教學

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