tcpdump 是 Linux 系統上最強大的命令列網路封包分析工具,支援豐富的過濾運算式,可精準擷取目標流量。本文將從資料鏈路層到應用層,系統講解各類協定的匹配技巧,並深入解析進階位元運算與邏輯組合,助你輕鬆診斷網路疑難雜症。
tcpdump [選項] [過濾運算式]
常用選項:
-i eth0 指定介面
-n 直接顯示 IP/埠號,不解析主機名
-c 10 擷取 10 個封包後退出
-v / -vv / -vvv 詳細/更詳細/最詳細輸出
-w file.pcap 寫入檔案供 Wireshark 分析
-r file.pcap 讀取檔案離線分析
-p 非混雜模式 (僅本機流量)
# Ethernet 廣播 (MAC 全 FF)
tcpdump 'ether dst ff:ff:ff:ff:ff:ff'
# Ethernet 多播 (MAC 最高位為 1)
tcpdump 'ether dst 01:00:5e:00:00:01' # 特定多播組
tcpdump 'ether multicast' # 所有多播
tcpdump 'arp' # 所有 ARP 請求/回應
tcpdump 'arp[6:2] = 1' # 僅 ARP 請求 (opcode=1)
tcpdump 'arp[6:2] = 2' # 僅 ARP 回應 (opcode=2)
tcpdump 'ip src 192.168.1.100' # 來源 IP
tcpdump 'ip dst 192.168.1.200' # 目的 IP
tcpdump 'ip host 192.168.1.100' # 雙向 (src 或 dst)
tcpdump 'ip net 192.168.1.0/24' # 整個網段
tcpdump 'ip broadcast' # IPv4 廣播
tcpdump 'ip multicast' # IPv4 多播 (224.0.0.0/4)
tcpdump 'ip6 multicast' # IPv6 多播
tcpdump 'icmp' # 所有 ICMP
tcpdump 'icmp[icmptype] = icmp-echo' # Echo Request (ping 請求)
tcpdump 'icmp[icmptype] = icmp-echoreply' # Echo Reply (ping 回應)
tcpdump 'icmp[icmptype] = icmp-timxceed' # TTL 逾期 (traceroute)
tcpdump 'tcp port 80' # HTTP (單一埠)
tcpdump 'tcp portrange 80-90' # 埠範圍
tcpdump 'udp port 53' # DNS
tcpdump 'tcp port 80 or tcp port 443' # HTTP 或 HTTPS
TCP 旗標位於第 13 個位元組 (offset 13);tcpdump 提供 `tcpflags` 別名:
# 僅 SYN (建立連線)
tcpdump 'tcp[tcpflags] = tcp-syn'
# SYN 或 ACK 或 FIN
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack|tcp-fin) != 0'
# 僅 RST (連線重設)
tcpdump 'tcp[tcpflags] = tcp-rst'
# 完整三向交握觀察
tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-ack) != 0'
tcpdump 'less 64' # ≤ 64 位元組
tcpdump 'greater 1500' # ≥ 1500 位元組
語法:proto[expr:size] — 從協定頭偏移 expr 讀取 size 位元組 (1/2/4),視為無號整數。
# IPv4 版本號 (第 0 位元組高 4 bits = 4)
tcpdump 'ip[0] = 0x40'
# TCP 視窗大小 (offset 14, 2 位元組)
tcpdump 'tcp[14:2] > 10000'
# 自訂旗標組合:SYN+ACK (0x12 = 18)
tcpdump 'tcp[13] = 18'
# AND
tcpdump 'host 192.168.1.100 and tcp port 80'
# OR
tcpdump 'tcp port 80 or tcp port 443'
# NOT
tcpdump 'not port 22'
# 複雜群組
tcpdump 'host 10.0.0.1 and (tcp port 80 or tcp port 443) and not icmp'
| 場景 | 命令範例 |
|---|---|
| 分析 HTTP 請求回應 | |
| 排除 SSH 干擾看其他流量 | |
| 抓取特定主機 DNS 查詢 | |
| 檢測 TCP 重傳 (RST/SYN 異常) | |
| 擷取大於 MTU 的封包 |
掌握 tcpdump 的過濾運算式,等於擁有了網路世界的「X 光眼」。從簡單的埠號過濾到位元級的旗標解析,再結合 Wireshark 離線深度分析,能解決 90% 以上的網路故障診斷需求。建議收藏常用運算式速查表,臨時速查更高效。