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

# tcpdump 網絡排查實戰教學:由入門到進階嘅封包分析技巧 做 IT 嘅你一定試過俾人話「個 network 好慢」,但係又冇人講得出邊度出事。今日就同大家分享一個 Linux 神器 — **tcpdump**,等你可以自己落手落腳捉封包,唔使靠估。 ## tcpdump 係乜嘢? tcpdump 係 Linux 平台最經典嘅命令行封包擷取工具,佢可以即時擷取同分析經過網絡介面嘅所有封包。無...

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

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

做 IT 嘅你一定試過俾人話「個 network 好慢」,但係又冇人講得出邊度出事。今日就同大家分享一個 Linux 神器 — **tcpdump**,等你可以自己落手落腳捉封包,唔使靠估。

## tcpdump 係乜嘢?

tcpdump 係 Linux 平台最經典嘅命令行封包擷取工具,佢可以即時擷取同分析經過網絡介面嘅所有封包。無論係排查連線問題、分析流量異常、定係做安全審計,tcpdump 都係必備技能。

## tcpdump 基本用法

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

sudo tcpdump -i eth0

呢個指令會擷取 eth0 介面上所有流量。但係現實環境流量好大,咁樣睇會眼花撩亂,所以要加 filter。

## tcpdump 常用 Filter 技巧

### 1. 指定主機

sudo tcpdump -i eth0 host 192.168.1.100

淨係睇同 192.168.1.100 有關嘅封包,雙向都包晒。

### 2. 指定 Port

sudo tcpdump -i eth0 port 443

淨係睇 HTTPS 流量。可以加 `src port` 或 `dst port` 指定方向:

sudo tcpdump -i eth0 dst port 3306

呢個淨係睇目的地係 MySQL port 嘅封包。

### 3. 組合 Filter

用 `and` / `or` 組合條件:

sudo tcpdump -i eth0 host 10.0.0.5 and port 80

淨係睇 10.0.0.5 嘅 HTTP 流量,精準到爆。

## tcpdump 進階實戰技巧

### 寫入檔案俾 Wireshark 分析

tcpdump 可以將封包 save 做 pcap 檔案,之後用 Wireshark 慢慢分析:

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

`-w` 參數指定輸出檔案,`-C` 可以限制檔案大細(單位 MB):

sudo tcpdump -i eth0 -w /tmp/capture.pcap -C 100 -W 5

呢個指令會建立最多 5 個 100MB 嘅輪替檔案,唔怕塞爆硬碟。

### 讀取 pcap 檔案

tcpdump -r /tmp/capture.pcap

用 `-r` 讀返之前 save 低嘅封包,可以再加 filter:

tcpdump -r /tmp/capture.pcap 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'

呢個 filter 淨係顯示 TCP SYN 同 FIN 封包,幫你快速搵出連線建立同關閉嘅時間點。

### 顯示封包詳細內容

`-A` 參數可以顯示封包嘅 ASCII 內容,對 HTTP 除錯好有用:

sudo tcpdump -i eth0 -A port 80

`-X` 就同時顯示 HEX 同 ASCII:

sudo tcpdump -i eth0 -X port 443

### 唔做 DNS Reverse Lookup

預設 tcpdump 會嘗試將 IP reverse lookup 做 hostname,呢個過程會拖慢擷取速度。加 `-n` 跳過:

sudo tcpdump -i eth0 -n host 8.8.8.8

再加 `-nn` 就連 port number 都唔轉 service name,速度最快。

## tcpdump 實戰場景

### 場景一:排查 DNS 問題

sudo tcpdump -i eth0 -n port 53

即時睇到所有 DNS 查詢同回應,如果見到大量查詢冇回應,就知 DNS server 出事。

### 場景二:檢查 TLS Handshake

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

睇晒所有 HTTPS 連線建立請求,幫你判斷係 client 定 server 嗰邊 timeout。

### 場景三:監察異常流量

sudo tcpdump -i eth0 -n 'not port 22 and not port 443' -c 100

排除 SSH 同 HTTPS 之後,擷取頭 100 個封包。如果見到奇怪嘅 port 或者大量對外連線,就要提高警覺。

## tcpdump 效能貼士

1. **用 `-c` 限制封包數量**:`-c 1000` 擷夠 1000 個就停,避免無限擷取
2. **用 BPF filter 喺 kernel level 過濾**:tcpdump 嘅 filter 係用 BPF(Berkeley Packet Filter),喺 kernel space 已經過濾咗,唔會浪費 CPU
3. **避免喺 production 用 `-v` / `-vv`**:verbose mode 會增加處理開銷

## 總結

tcpdump 係每個 Linux 系統管理員必須掌握嘅工具。由基本嘅 host/port filter,到進階嘅 pcap 檔案分析同 BPF 語法,熟習咗之後排查網絡問題就事半功倍。下次有人話「個 network 慢」,你就可以好型咁話:「等我 tcpdump 睇睇先。」

記住:**捉到封包,就捉到真相。**