
# 網絡工程師必學:用 tcpdump 快速排查網絡故障(附實戰案例)
做 IT 嘅朋友一定遇過呢種情況:個客打嚟話「上唔到網喎」、「個 server 好慢」、「VPN 成日斷」,但你 remote 入去睇又好似乜事都冇。呢個時候,**tcpdump** 就係你最好嘅朋友。
今日同大家分享幾個 tcpdump 實戰技巧,等你下次遇到網絡問題可以快速定位 root cause,唔使靠估。
## 乜嘢係 tcpdump?
tcpdump 係 Linux 上最強大嘅命令行封包分析工具,可以即時擷取網絡介面上嘅所有 traffic,然後用 filter 篩選出你想要嘅封包。基本上所有 Unix-like 系統都內置咗,唔使額外安裝。
## tcpdump 基本用法
最簡單嘅用法就係直接 run:
sudo tcpdump -i eth0
呢個 command 會顯示 eth0 介面上所有經過嘅封包。但現實中咁樣睇會太多 noise,所以要加 filter。
## 實戰案例一:檢查特定 port 有冇 traffic
假設你個 web server 行緊 port 443,你想知到底有冇人 connect 緊:
sudo tcpdump -i eth0 port 443 -nn
`-nn` 參數好重要:唔做 DNS reverse lookup 同唔轉換 port name,快好多。輸出會類似:
14:32:01.123456 IP 192.168.1.100.54321 > 10.0.0.1.443: Flags [S], seq 123456789
見到 `Flags [S]` 即係 SYN packet,代表有人嘗試建立 TCP 連線。如果只得 SYN 冇後續,即係可能 firewall block 咗或者 server 冇回應。
## 實戰案例二:排查 DNS 問題
用户話「上到 Google 但上唔到公司 internal system」,好大機會係 DNS 出事:
sudo tcpdump -i eth0 port 53 -vv
`-vv` 會顯示詳細內容,你可以睇到 DNS query 嘅 domain name 同埋 server 回覆嘅 IP address。如果見到 query 出去但冇 response,即係 DNS server 有問題。
## 實戰案例三:擷取 HTTP headers 做 debug
有時要睇 API call 嘅 request/response headers:
sudo tcpdump -i eth0 -A -s 0 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
呢個 command 會顯示 HTTP 嘅實際內容(`-A` = ASCII),你可以睇到 headers、cookies、甚至 response body。
## 實戰案例四:儲存封包俾同事分析
有時你要將 capture 咗嘅 traffic send 俾 network team 分析:
sudo tcpdump -i eth0 -w /tmp/capture.pcap host 192.168.1.50
`-w` 會將封包寫入 pcap file,之後可以用 Wireshark 打開慢慢分析。`host 192.168.1.50` 限制只 capture 呢部機嘅 traffic。
## 進階技巧:組合 filter
tcpdump 支援 Boolean expression,你可以組合多個條件:
sudo tcpdump -i eth0 'host 10.0.0.5 and (port 443 or port 80) and not port 22'
呢個 command 會 capture 10.0.0.5 嘅 HTTP/HTTPS traffic,但排除 SSH,等你唔會俾自己嘅 SSH session 幹擾。
## 常用 tcpdump 參數速查表
| 參數 | 用途 |
|——|——|
| `-i eth0` | 指定網絡介面 |
| `-nn` | 唔做 DNS/port name lookup |
| `-vv` / `-vvv` | 詳細輸出 |
| `-A` | 以 ASCII 顯示封包內容 |
| `-w file.pcap` | 儲存到檔案 |
| `-r file.pcap` | 讀取 pcap 檔案 |
| `-c 100` | 只 capture 100 個封包 |
| `-s 0` | 擷取完整封包(唔 truncate) |
## 總結
tcpdump 係每個網絡工程師必須熟練掌握嘅工具。記住幾個常用 filter pattern,下次遇到網絡問題就唔使靠估,直接用 data 説話。最緊要係:**先縮窄範圍,再加 detail** — 唔好一嚟就 `tcpdump -i any -vvv`,你會俾自己淹沒喺封包海入面。
🔗 參考資料:NVD NIST 漏洞資料庫
有咩 tcpdump 問題歡迎留言討論!



