tcpdump 是 Linux 系統內建的強大網路封包擷取與分析工具,能即時監聽網卡流量、過濾特定協定/主機/連接埠,是網管與開發者診斷網路問題的必備利器。
| 參數 | 說明 |
|---|---|
-i <介面> | 指定監聽網卡(預設 eth0) |
-n | 直接顯示 IP,不解析主機名 |
-X | 以十六進位與 ASCII 顯示封包內容 |
-w <檔案> | 寫入檔案供 Wireshark 分析 |
-r <檔案> | 讀取封包檔案 |
-c <數量> | 擷取指定數量封包後結束 |
# 監聽第一張網卡所有流量
tcpdump
# 指定監聽 eth1
tcpdump -i eth1
# 擷取 sundown 主機收發封包
tcpdump host sundown
# 指定 IP 210.27.48.1
tcpdump host 210.27.48.1
# helios 與 hot 或 ace 之間的通訊
tcpdump host helios and \( hot or ace \)
# 210.27.48.1 與 210.27.48.2 或 .3 的通訊
tcpdump host 210.27.48.1 and \( 210.27.48.2 or 210.27.48.3 \)
# ace 與所有主機通訊,排除 helios
tcpdump ip host ace and not helios
# 來源主機 hostname 發送的封包
tcpdump -i eth0 src host hostname
# 目的地為 hostname 的封包
tcpdump -i eth0 dst host hostname
# 特定主機的 Telnet (port 23) 流量
tcpdump tcp port 23 host 210.27.48.1
# 監聽本機 UDP 123 (NTP)
tcpdump udp port 123
# 本機與 Berkeley 網路通訊
tcpdump net ucb-ether
# 經由 snup 閘道的 FTP 流量
tcpdump 'gateway snup and (port ftp or ftp-data)'
# 非本地網路的 IP 封包
tcpdump ip and not net localnet
# TCP 連線建立/斷開封包 (SYN/FIN),非本地網路
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 and not src and dst net localnet'
# HTTP (port 80) 含資料載荷的封包
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
# 封包長度 > 576 且經閘道 snup
tcpdump 'gateway snup and ip[2:2] > 576'
# IP 廣播/多播但非乙太網層廣播
tcpdump 'ether[0] & 1 = 0 and ip[16] >= 224'
# 非 ping 的 ICMP 封包
tcpdump 'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'
-w capture.pcap 儲存離線分析,再用 Wireshark 開啟視覺化檢視。-s 0 擷取完整封包(預設 262144 bytes)。-C 100 -W 10 切割檔案,避免單一檔案過大。熟練掌握 tcpdump 過濾語法,能大幅提升網路疑難排解效率。建議平時多實測不同場景,累積常用指令備忘錄。