萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 作業系統 >  >> Linux 教學

Linux 網路封包分析神器:tcpdump 進階過濾語法與實戰範例大全

tcpdump 是 Linux 系統管理者與網路工程師必備的命令列封包擷取分析工具,基於 libpcap 函式庫,支援強大的 BPF (Berkeley Packet Filter) 過濾語法。本文系統整理常用過濾表達式與實戰場景。

基礎啟動與介面指定

tcpdump                    # 預設第一個介面 (通常 eth0)
tcpdump -i eth1            # 指定介面
tcpdump -i any             # 所有介面
tcpdump -D                 # 列出可用介面

主機與網路過濾

需求指令範例
特定主機所有封包tcpdump host 192.168.1.50
來源/目的主機tcpdump src host 192.168.1.50 / dst host
雙向通訊tcpdump host 192.168.1.50 and host 192.168.1.60
排除特定主機tcpdump host 192.168.1.50 and not host 192.168.1.100
整個網段tcpdump net 192.168.1.0/24
閘道通過封包tcpdump gateway 192.168.1.1

通訊埠與協定過濾

# 特定埠口
tcpdump port 80
tcpdump src port 22
tcpdump dst port 53

# 協定過濾
tcpdump tcp
tcpdump udp
tcpdump icmp
tcpdump ip6              # IPv6

# 組合:HTTP 流量
tcpdump tcp port 80
tcpdump 'tcp port 80 and (((ip[2:2] - ((ip[0]&0xf)<<2)) - ((tcp[12]&0xf0)>>2)) != 0)'
# 最後條件過濾掉無資料的 SYN/FIN/ACK 封包

進階封包內容過濾

場景過濾表達式
TCP 連線建立/結束 (SYN/FIN)tcpdump 'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
封包大小 > 576 bytestcpdump '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'
特定 TCP 旗標組合tcpdump 'tcp[13] == 0x12' (SYN+ACK)

輸出格式解讀

10:30:45.123456 IP 192.168.1.50.54321 > 192.168.1.100.80: Flags [S], seq 123456789, win 64240, options [mss 1460,sackOK,TS val 1234567 ecr 0], length 0
  • 時間戳:10:30:45.123456
  • 協定:IP
  • 來源:192.168.1.50.54321 (IP.埠口)
  • 方向:>
  • 目的:192.168.1.100.80
  • TCP 旗標:Flags [S] (SYN)
  • 序號/視窗/選項/長度

常用輸出控制參數

tcpdump -n                    # 不解析主機名/埠口 (加速)
tcpdump -nn                   # 連埠口號碼都不解析
tcpdump -X                    # 顯示十六進位 + ASCII 內容
tcpdump -XX                   # 含鏈路層標頭
tcpdump -s 0                  # 擷取完整封包 (預設 262144 bytes)
tcpdump -w capture.pcap       # 寫入檔案供 Wireshark 分析
tcpdump -r capture.pcap       # 讀取檔案分析
tcpdump -c 100                # 擷取 100 個封包後結束
tcpdump -e                    # 顯示連結層標頭 (MAC)

實戰場景範例

  1. 分析 HTTP 效能:tcpdump -i eth0 -n -s 0 -w http.pcap tcp port 80
  2. 排查 DNS 問題:tcpdump -i eth0 -n udp port 53
  3. 偵測掃描攻擊:tcpdump -i eth0 'tcp[tcpflags] & tcp-syn != 0 and tcp[tcpflags] & tcp-ack = 0'
  4. VLAN 標籤分析:tcpdump -e -n 'vlan 100'

tcpdump 擷取示意

最佳實務建議

  • 生產環境務必加 -n 避免 DNS 解析阻塞
  • 高流量環境使用 -c 限制數量或 -w 離線分析
  • 複雜過濾寫入檔案:tcpdump -f filter.txt -i eth0
  • 結合 Wireshark / tshark 進行深度協定分析

熟練掌握 tcpdump 過濾語法,能在無圖形介面的伺服器環境快速定位網路故障、分析效能瓶頸與偵測安全異常。

copyright © 萬盛學電腦網 all rights reserved