首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

tcpdump 完全指南:從交叉編譯移植到高級過濾表達式、Wireshark 聯動分析實戰

     編輯:Java 綜合教學

tcpdump 從零到精通:ARM 交叉編譯、核心參數、過濾表達式、輸出解讀、Wireshark 聯動全流程

tcpdump 是 Linux/Unix 系統級抓包神器,通過 libpcap 直接讀取數據鏈路層幀。本文涵蓋嵌入式移植編譯、核心選項詳解、BPF 過濾語法、協議級輸出解讀、HTTP 抓包實戰、Wireshark 離線分析最佳實踐。

1. 嵌入式 ARM 交叉編譯移植

# 1. 下載源碼
wget https://www.tcpdump.org/release/tcpdump-4.99.1.tar.gz
wget https://www.tcpdump.org/release/libpcap-1.10.1.tar.gz

# 2. 編譯 libpcap
tar xf libpcap-1.10.1.tar.gz && cd libpcap-1.10.1
./configure --host=arm-linux --target=arm-linux \
  CC=/opt/arm-2011.03/bin/arm-none-linux-gnueabi-gcc \
  --with-pcap=linux
make && make install  # 生成 libpcap.a

# 3. 編譯 tcpdump
cd ../tcpdump-4.99.1
./configure --host=arm-linux --target=arm-linux \
  CC=/opt/arm-2011.03/bin/arm-none-linux-gnueabi-gcc
make && make install  # 當前目錄生成 tcpdump 可執行文件

# 4. 部署到目標板
scp tcpdump root@target:/usr/sbin/

關鍵點:CC 指定交叉編譯工具鏈;--with-pcap=linux 強制使用 Linux 平台特定代碼;靜態鏈接可避免目標板缺庫:LDFLAGS="-static"。

2. 核心選項速查表

選項作用典型場景
-i eth0指定網卡多網卡服務器抓取特定流量
-n不解析域名,直接顯示 IP/端口號加快輸出、避免 DNS 阻塞
-nn連端口號也不解析服務名極速輸出
-s 0抓取完整幀(默認 68/96 字節截斷)需完整 Payload 分析
-c 100抓 100 個包後退出自動化腳本、定時抓樣
-w file.pcap寫入二進制 pcap 文件離線分析、Wireshark 導入
-r file.pcap讀取 pcap 文件離線分析複現現場、異地協作
-X十六進制 + ASCII 顯示 Payload(不含鏈路層)快速查看 HTTP/JSON 明文
-XX含鏈路層頭部的十六進制 + ASCII分析自定義協議、VLAN 標籤
-v/-vv/-vvv遞增詳盡度:TTL/ID/選項/校驗和/SMB/NFS 細節深度協議排查
-e顯示鏈路層頭部(MAC、VLAN、協議類型)二層網絡排查
-S顯示絕對 TCP 序列號(而非相對號)精確序列號分析
-t/-tt/-ttt/-tttt時間戳格式控制:無/相對/毫秒差/絕對日期時間日誌關聯分析
-U寫文件時包級同步刷盤(配合 -w)防止崩潰丟包

3. BPF 過濾表達式:從入門到精通

3.1 基本語法三元組

[proto] [dir] [type] value
# 例子:
tcp port 80           # proto=tcp, type=port, value=80
src host 192.168.1.1  # dir=src, type=host, value=IP
dst net 10.0.0.0/8    # dir=dst, type=net, value=CIDR
  • proto:ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, tcp, udp, icmp, sctp。
  • dir:src, dst, src or dst, src and dst;鏈路層用 inbound/outbound。
  • type:host, net, port, portrange。

3.2 邏輯運算符優先級

not (!)  >  and (&&)  =  or (||)   # 同級從左到右結合
# 例子:
tcp port 80 or tcp port 443 and host 1.2.3.4
# 等價於:tcp port 80 or (tcp port 443 and host 1.2.3.4)

3.3 進階過濾實戰

需求表達式
抓取 HTTP GET/POST 請求tcp[20:2]=0x4745 or tcp[20:2]=0x504f(GET=0x4745 "GE", POST=0x504f "PO")
抓取 HTTP 響應tcp[20:2]=0x4854(HTTP=0x4854 "HT")
排除 SSH 流量not port 22
只抓特定 VLAN 內的 IP 流量vlan 100 and ip
MPLS 雙層標籤過濾mpls 100000 and mpls 1024
TCP 三次握手包'tcp[tcpflags] & (tcp-syn|tcp-fin) != 0'
IP 片段包'ip[6:2] & 0x1fff != 0'
ICMP 非 ping 包'icmp[icmptype] != icmp-echo and icmp[icmptype] != icmp-echoreply'

4. 輸出解讀:協議級字段詳解

4.1 鏈路層

10:30:45.123456 eth0  00:11:22:33:44:55 > 66:77:88:99:aa:bb, ethertype IPv4 (0x0800), length 98
  • ethertype:0x0800=IPv4, 0x86DD=IPv6, 0x0806=ARP, 0x8100=VLAN。

4.2 TCP 核心字段

src > dst: Flags [S], seq 123456, ack 0, win 65535, options [mss 1460,sackOK,TS val 123 ecr 0], length 0
  • Flags:S=SYN, F=FIN, P=PSH, R=RST, .=ACK only, U=URG, E=ECE, C=CWR。
  • seq:絕對序列號(需 -S),或相對號。
  • ack:期望收到的下一個序列號。
  • win:接收窗口大小(滑動窗口)。
  • options:MSS、SACK、Timestamp、WS(窗口縮放)等。

4.3 UDP/DNS/NFS/SMB 關鍵字段

  • UDP:udp 53: DNS query A example.com(自動解析應用層)。
  • NFS:NFS reply ok 1472 read REG 100664 ids 417/0 sz 29388(-v 顯示文件屬性)。
  • SMB:-v 顯示完整 SMB 協議樹,單包可佔屏,慎用。

5. 經典抓包命令模板

# 1. 生產環境抓取 HTTP 明文(排除 SSH、限制大小、寫文件)
tcpdump -i eth0 -nn -s 0 -c 5000 -w http.pcap 'tcp port 80 and (tcp[20:2]=0x4745 or tcp[20:2]=0x504f or tcp[20:2]=0x4854)'

# 2. 排查 DNS 解析慢
tcpdump -i eth0 -nn -s 0 -vvv port 53

# 3. 分析 TCP 重傳/亂序
tcpdump -i eth0 -nn -s 0 -S -vv 'tcp[tcpflags] & tcp-rst != 0 or tcp[tcpflags] & tcp-fin != 0'

# 4. 抓取特定客戶端完整會話
tcpdump -i eth0 -nn -s 0 -w client.pcap host 192.168.1.100 and not port 22

6. tcpdump + Wireshark 黃金搭檔

  1. 服務器無圖形界面:tcpdump -w capture.pcap 抓包。
  2. scp capture.pcap local:/tmp/ 下載本地。
  3. Wireshark 打開:File → Open,享受圖形化流圖、專家信息、統計圖表、導出對象(HTTP 對象、文件)、Lua 腳本深度分析。
  4. 顯示過濾器(Wireshark 專用,非 BPF):http.request.method == "POST"、tcp.analysis.retransmission、dns.flags.response == 1。

7. 避坑指南

  • 權限:需 root 或 CAP_NET_RAW、CAP_NET_ADMIN;容器需 --cap-add=NET_RAW --cap-add=NET_ADMIN。
  • 接口混雜模式:-p 關閉混雜模式,但某些驅動/虛擬網卡(如 docker0、any)強制混雜,-p 不生效。
  • 大文件切割:-C 100 -W 10 每 100MB 切換文件,最多 10 個文件循環覆蓋。
  • IPv6 過濾:ip6 proto tcp、ip6 host 2001:db8::1。
  • 內核丟包統計:抓包結束時顯示 packets captured / packets received by filter / packets dropped by kernel,dropped > 0% 需增大 -B 緩衝區或降低抓包率。

8. 總結

tcpdump 是網絡可觀測性的基石。熟練掌握 BPF 過濾語法、協議字段解讀、pcap 離線分析流程,配合 Wireshark 圖形化優勢,可解決 95% 以上網絡疑難雜癥。建議將常用命令模板做成別名或腳本,沉澱為個人/團隊知識庫。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved