Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 抓包神器 tcpdump 進階用法全解析

編輯:Linux 教學

前言

tcpdump 是 Linux 系統上最強大的命令列網路封包分析工具,支援豐富的過濾運算式,可精準擷取目標流量。本文將從資料鏈路層到應用層,系統講解各類協定的匹配技巧,並深入解析進階位元運算與邏輯組合,助你輕鬆診斷網路疑難雜症。

一、基礎語法與常用選項

tcpdump [選項] [過濾運算式]
常用選項:
  -i eth0          指定介面
  -n               直接顯示 IP/埠號,不解析主機名
  -c 10            擷取 10 個封包後退出
  -v / -vv / -vvv  詳細/更詳細/最詳細輸出
  -w file.pcap     寫入檔案供 Wireshark 分析
  -r file.pcap     讀取檔案離線分析
  -p               非混雜模式 (僅本機流量)

二、資料鏈路層 (Ethernet/ARP) 過濾

1. 廣播與多播

# 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'               # 所有多播

2. ARP 封包

tcpdump 'arp'              # 所有 ARP 請求/回應
tcpdump 'arp[6:2] = 1'     # 僅 ARP 請求 (opcode=1)
tcpdump 'arp[6:2] = 2'     # 僅 ARP 回應 (opcode=2)

三、網路層 (IP/ICMP) 過濾

1. IP 位址與方向

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'     # 整個網段

2. 廣播/多播 IP

tcpdump 'ip broadcast'      # IPv4 廣播
tcpdump 'ip multicast'      # IPv4 多播 (224.0.0.0/4)
tcpdump 'ip6 multicast'     # IPv6 多播

3. ICMP (ping/traceroute)

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)

四、傳輸層 (TCP/UDP) 過濾

1. 埠號過濾

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

2. TCP 旗標進階匹配 (核心技巧)

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'

3. 封包長度過濾

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'

七、實戰範例場景

tcpdump -i eth0 -n -s0 -w http.pcap 'tcp port 80'tcpdump -n 'not port 22'tcpdump -n 'host 192.168.1.5 and udp port 53'tcpdump -n 'tcp[tcpflags] & (tcp-rst|tcp-syn) != 0'tcpdump -n 'greater 1514'
場景命令範例
分析 HTTP 請求回應
排除 SSH 干擾看其他流量
抓取特定主機 DNS 查詢
檢測 TCP 重傳 (RST/SYN 異常)
擷取大於 MTU 的封包

結語

掌握 tcpdump 的過濾運算式,等於擁有了網路世界的「X 光眼」。從簡單的埠號過濾到位元級的旗標解析,再結合 Wireshark 離線深度分析,能解決 90% 以上的網路故障診斷需求。建議收藏常用運算式速查表,臨時速查更高效。

Copyright © Windows教程網 All Rights Reserved