tcpdump 是基於 libpcap 的網絡抓包分析神器,能完整截獲數據包頭部,支持按網絡層、協議、主機、端口過濾,提供 and/or/not 邏輯組合。官網:tcpdump.org
| 類別 | 關鍵字 | 說明 |
|---|---|---|
| 類型 | host | 指定主機 IP/域名 |
net | 指定網段 | |
port | 指定端口 | |
| 方向 | src/dst | 源/目的地址 |
src or dst, src and dst | 組合方向 | |
| 協議 | ip, arp, tcp, udp, fddi... | 協議過濾 |
| 其他 | gateway, broadcast, less, greater | 網關、廣播、包長比較 |
| 邏輯 | not/!, and/&&, or/|| | 非、與、或 |
# 1. 默認監聽第一個接口 tcpdump # 2. 指定接口、包數、存文件 tcpdump -i eth0 -c 100 -w capture.pcap # 3. 監聽特定主機 tcpdump host jibo tcpdump host jibo and \(tiger or john\) tcpdump host 210.27.46.1 and \(210.27.48.2 or 210.27.48.3\) # 4. 排除特定主機 tcpdump ip host tiger and not jibo tcpdump ip host 210.27.48.1 and ! 210.27.48.2 # 5. 方向過濾 tcpdump -i eth0 src host jibo tcpdump -i eth0 dst host jibo # 6. 協議+端口+主機 tcpdump tcp port 23 host 210.27.48.1 tcpdump udp port 123
arm-none-linux-gnueabi-gcc(已配置環境變量)libpcap-1.4.0.tar.gz, tcpdump-4.4.0.tar.gztar -xzf libpcap-1.4.0.tar.gz cd libpcap-1.4.0 # 修改 configure:註釋掉交叉編譯檢查報錯段 # if test -z "$with_pcap" && test "$cross_compile" = yes; then ... fi ./configure --host=arm-none-linux-gnueabi # 檢查 Makefile 中 CC=arm-none-linux-gnueabi-gcc make sudo make install # 成功後 /usr/local/include 下出現 pcap.h 等頭文件
踩坑提示:若 sudo make install 提示找不到交叉編譯器,請切換到 root 並 source 環境變量腳本。
tar -xzf tcpdump-4.4.0.tar.gz cd tcpdump-4.4.0 # 修改 configure:註釋掉 Linux 版本檢查報錯段 # if test $ac_cv_linux_vers = unknown; then ... fi ./configure --host=arm-none-linux-gnueabi # 修改生成的 Makefile 關鍵變量: INCLS = -I. -I./../libpcap-1.4.0 -I./missing -I/usr/local/include DEFS = -DHAVE_CONFIG_H -I/usr/local/include -I./missing -D_U_="__attribute__((unused))" LDFLAGS = -L/usr/local/lib make # 若報找不到 libpcap.a,確保目錄名與 Makefile 中 LIBS 路徑一致 sudo make install # 產出 /usr/local/sbin/tcpdump(ARM 二進制) arm-none-linux-gnueabi-strip tcpdump # 減小體積
將編譯好的 tcpdump 複製到嵌入式開發板 /usr/sbin/,掛載動態庫或靜態鏈接後即可直接運行抓包分析。
本文從過濾語法到交叉編譯全流程,提供可落地的 tcpdump 移植指南。關鍵點在於修改 configure 規避交叉編譯檢查、正確配置 INCLS/LDFLAGS 指向 libpcap 安裝路徑。本文出自「嵌入式開發樂園」:原文鏈接