x86工控机安装tcpdump——或者交叉编译
1 下载官网源码

2、安装需要的文件,否则编译报错
sudo apt-get install flex
sudo apt-get install bison
3、 解压、创建文件夹
注意在两个文件的同一目录下创建文件夹tools

mkdir tools
解压libpcap源码以及
# tar xvf libpcap-1.10.5.tar.gz # cd libpcap-1.10.5/
执行上层configure,指定编译器和编译结果的安装目录
../configure --prefix=/val/tcpdump/tools #使编译的东西放在这个目录里面
#不使用交叉编译 --host=arm-linux CC=aarch64-linux-gnu-gcc
make && make install
再解压tcpdump-4.99.5.tar.xz 并编译
tar xvf tcpdump-4.99.5.tar.xz
cd tcpdump-4.99.5
./configure --prefix=/val/tcpdump/tools #使编译的东西放在这个目录里面
make && make install
编译后生成的文件目录如下:

root@blj-pc:/val/tcpdump/tools/lib# ls -lah 总用量 3.8M drwxr-xr-x 3 root root 4.0K 8月 4 13:26 . drwxr-xr-x 6 root root 4.0K 8月 4 13:26 .. -rw-r--r-- 1 root root 2.6M 8月 4 13:26 libpcap.a lrwxrwxrwx 1 root root 12 8月 4 13:26 libpcap.so -> libpcap.so.1 lrwxrwxrwx 1 root root 17 8月 4 13:26 libpcap.so.1 -> libpcap.so.1.10.5 -rwxr-xr-x 1 root root 1.3M 8月 4 13:26 libpcap.so.1.10.5 drwxr-xr-x 2 root root 4.0K 8月 4 13:26 pkgconfig root@blj-pc:/val/tcpdump/tools/lib# ls ../bin/ -lah 总用量 16M drwxr-xr-x 2 root root 4.0K 8月 4 13:29 . drwxr-xr-x 6 root root 4.0K 8月 4 13:26 .. -rwxr-xr-x 1 root root 3.8K 8月 4 13:26 pcap-config -rwxr-xr-x 1 root root 7.7M 8月 4 13:29 tcpdump -rwxr-xr-x 1 root root 7.7M 8月 4 13:29 tcpdump.4.99.5 root@blj-pc:/val/tcpdump/tools/lib# ls ../share/ -lah 总用量 12K drwxr-xr-x 3 root root 4.0K 8月 4 13:26 . drwxr-xr-x 6 root root 4.0K 8月 4 13:26 .. drwxr-xr-x 6 root root 4.0K 8月 4 13:26 man root@blj-pc:/val/tcpdump/tools/lib# ls ../include/ -lah 总用量 24K drwxr-xr-x 3 root root 4.0K 8月 4 13:26 . drwxr-xr-x 6 root root 4.0K 8月 4 13:26 .. drwxr-xr-x 2 root root 4.0K 8月 4 13:26 pcap -rw-r--r-- 1 root root 2.3K 8月 4 13:26 pcap-bpf.h -rw-r--r-- 1 root root 2.2K 8月 4 13:26 pcap.h -rw-r--r-- 1 root root 2.0K 8月 4 13:26 pcap-namedb.h root@blj-pc:/val/tcpdump/tools/lib#
4、文件保存
方法一:使用 tcpdump 自带的日志轮转功能(推荐)
通过 -G(时间间隔)和 -W(文件数量)参数实现定期保存:
sudo tcpdump -i eth0 -s 0 -G 3600 -W 24 -w /path/to/capture_%Y-%m-%d_%H%M%S.pcap -Z root
-
-i eth0:监听的网卡(替换为需要抓取的网卡名)。 -
-s 0:抓取完整数据包(避免截断)。 -
-G 3600:每 3600 秒(1小时) 轮转一个新文件。 -
-W 24:保留最近 24 个文件(自动覆盖旧文件)。 -
-w capture_%Y-%m-%d_%H%M%S.pcap:文件名格式(时间戳会被替换,如capture_2023-10-01_120000.pcap)。 -
-Z root:以 root 权限保存文件(避免权限问题)。
效果:每小时生成一个新文件,保留最近 24 小时数据,可直接用 Wireshark 打开
.pcap文件。
方法二:结合 cron 定时任务 + 脚本
1. 创建抓包脚本 /root/capture.sh
#!/bin/bash # 抓包时长(秒)和保存路径 DURATION=3600 SAVE_DIR="/path/to/save" FILENAME="capture_$(date +%Y-%m-%d_%H%M%S).pcap" # 抓包命令 tcpdump -i eth0 -s 0 -w $SAVE_DIR/$FILENAME -G $DURATION -W 1 赋予执行权限: sudo chmod +x /root/capture.sh
2. 添加 cron 定时任务
sudo crontab -e
添加以下内容(每小时执行一次):
0 * * * * /root/capture.sh # 每小时的第0分钟执行
关键说明
-
文件格式:
.pcap是 Wireshark 默认支持的格式,无需额外转换。 -
时间分割:
-
方法一:由
tcpdump自动管理轮转(更高效)。 -
方法二:通过
cron灵活控制(适合复杂调度)。
-
-
权限问题:
使用sudo或-Z root避免权限错误。 -
清理旧文件:
若需自动清理,可在脚本中添加删除命令(例如保留最近 7 天文件):find /path/to/save -name "*.pcap" -mtime +7 -delete
验证命令
-
查看生成的 pcap 文件:
ls -lh /path/to/save/ -
用 Wireshark 打开文件:
wireshark /path/to/save/capture_2023-10-01_120000.pcap
通过以上方法,你可以实现定时抓包并保存为 Wireshark 可读的文件。
5 交叉编译可参考
#将前面编译生成的libpcap相关文件挂载到当前目录
# ln -s ../../libpcap-1.10.5/build/install/ libpcap
#执行上层configure,指定编译器及依赖的libpcap头文件、库文件路径,生成makefile
# ../configure --host=arm-linux CC=aarch64-linux-gnu-gcc CFLAGS="-I./libpcap/include/ -L./libpcap/lib/"
编译
# make
编译完成,查看文件类型
# file tcpdump tcpdump: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, not stripped
可以使用scp、ftp、lrzsz、tftp等命令,能把文件传到嵌入式设备上就行;
例如使用tftp,PC(IP:192.168.1.33)开启tftpd程序后,在嵌入式设备获取文件并添加执行权限:
# tftp -g -r tcpdump192.168.1.33
# chmod +x tcpdump
# tftp -g -r libpcap.so.1.10.5 192.168.1.33
# ln -s libpcap.so.1.10.5 libpcap.so.1
# export LD_LIBRARY_PATH=./
#
root@blj-pc:/val/tcpdump/tools/bin# tcpdump --help
tcpdump version 4.9.3
libpcap version 1.9.1 (with TPACKET_V3)
OpenSSL 1.1.1f 31 Mar 2020
Usage: tcpdump [-aAbdDefhHIJKlLnNOpqStuUvxX#] [ -B size ] [ -c count ]
[ -C file_size ] [ -E algo:secret ] [ -F file ] [ -G seconds ]
[ -i interface ] [ -j tstamptype ] [ -M secret ] [ --number ]
[ -Q in|out|inout ]
[ -r file ] [ -s snaplen ] [ --time-stamp-precision precision ]
[ --immediate-mode ] [ -T type ] [ --version ] [ -V file ]
[ -w file ] [ -W filecount ] [ -y datalinktype ] [ -z postrotate-command ]
[ -Z user ] [ expression ]
执行成功后,可以将libpcap.so都移动到默认库的位置,避免每次运行都需要配置环境变量。
2 如何交叉编译
2.1 解压源码,创建编译文件夹 source 环境
mkdir bild
source XXX
2.2 默认编译,但是提示错误,而且编译后的代码位置也是默认放在usr下不方便
checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... configure: error: in `/work/TS30/3tcpdump/libpcap-1.10.5': configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details
上述错误的解决办法——编译带参数--host= XXX(If you meant to cross compile, use `--host'.),host参数可以查看环境文件
export TARGET_PREFIX=arm-ostl-linux-gnueabi- export CONFIGURE_FLAGS="--target=arm-ostl-linux-gnueabi --host=arm-ostl-linux-gnueabi --build=x86_64-linux --with-libtool-sysroot=$SDKTARGETSYSROOT" export CFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types " export CXXFLAGS=" -O2 -pipe -g -feliminate-unused-debug-types " export LDFLAGS="-Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed " export CPPFLAGS="" export KCFLAGS="--sysroot=$SDKTARGETSYSROOT"
因此使用该命令编译
cd libpcap-1.10.5/
./configure --host=arm-ostl-linux-gnueabi --prefix=/work/TS30/3tcpdump/build
make
make install
cd tcpdump-4.99.5
root@blj-virtual-machine:/3tcpdump/tcpdump-4.99.5#
2.3 编译完成后拷贝至目标平台
root@blj-virtual-machine:/work/TS30/3tcpdump/build/lib# ls -lah 总用量 2.5M drwxr-xr-x 3 root root 4.0K 10月 21 11:50 . drwxr-xr-x 6 root root 4.0K 10月 21 11:50 .. -rw-r--r-- 1 root root 1.5M 10月 21 11:50 libpcap.a lrwxrwxrwx 1 root root 12 10月 21 11:50 libpcap.so -> libpcap.so.1 lrwxrwxrwx 1 root root 17 10月 21 11:50 libpcap.so.1 -> libpcap.so.1.10.5 -rwxr-xr-x 1 root root 1.1M 10月 21 11:50 libpcap.so.1.10.5 drwxr-xr-x 2 root root 4.0K 10月 21 11:50 pkgconfig root@blj-virtual-machine:/work/TS30/3tcpdump/build/lib# scp libpcap.* root@192.168.1.108:/lib libpcap.a 100% 1449KB 1.6MB/s 00:00 libpcap.so 100% 1077KB 1.6MB/s 00:00 libpcap.so.1 100% 1077KB 1.6MB/s 00:00 libpcap.so.1.10.5 100% 1077KB 1.5MB/s 00:00 root@blj-virtual-machine:/work/TS30/3tcpdump/build/lib#
创建软链接
root@00:/lib# ln -s libpcap.so.1.10.5 libpcap.so.1 ln: libpcap.so.1: File exists root@00:/lib# rm libpcap.so.1 root@00:/lib# ln -s libpcap.so.1.10.5 libpcap.so.1 root@00:/lib# rm libpcap.so root@00:/lib# ln -s libpcap.so.1 libpcap.so root@00:/lib# ls -lah
2.3.1 但是在执行的时候还是提示错误
(libnl-3.so.200 是一个动态链接库,属于 libnl 库的一部分,主要用于简化应用程序与 Linux 内核的 Netlink 接口交互。它通常在网络相关的开发中被使用,例如配置网络接口或管理路由表。)
root@00:~/work/00/blj# ./tcpdump ./tcpdump: error while loading shared libraries: libnl-genl-3.so.200: cannot open shared object file: No such file or directory root@00:~/work/00/blj#
此库的下载地址为:
libnl - Netlink Protocol Library Suite
同样的方法编译,否则也是提示
checking whether the C compiler works... yes checking for C compiler default output file name... a.out checking for suffix of executables... checking whether we are cross compiling... configure: error: in `/work/30/3tcpdump/libnl-1.1.4': configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details ./configure --prefix=/work/30/3tcpdump/lib --host=arm-ostl-linux-gnueabi
make
make install
scp libnl-3.so.200.20.0 root@192.168.1.108:/lib
目标平台上执行:ln -s libnl-3.so.200.20.0 libnl-genl-3.so.200
2.3.2 上述库编译成功后又提示错误
(libdbus-1.so.3 是 D-Bus(Desktop Bus)的核心库文件之一,主要用于进程间通信(IPC)。D-Bus 提供了一种简单的方式,让不同的应用程序或服务在同一系统中进行交互。)
./tcpdump: error while loading shared libraries: libdbus-1.so.3: cannot open shared object file: No such file or directory
解决方案:
因为是进程的交互库,交叉编译环境中有该库,直接到交叉编译环境下搜索拷贝即可——成功抓取数据
scp libdbus-1.so.3.32.0 root@192.168.1.108:/lib
cd /lib
root@00:/lib# ln -s libdbus-1.so.3.32.0 libdbus-1.so.3
root@00:/lib# cd -
/home/root/work/00/blj
root@ts600:~/work/00/blj# ./tcpdump
tcpdump: verbose output suppressed, use -v[v]... for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), snapshot length 262144 bytes
浙公网安备 33010602011771号