前言
对于网络抓包工具,大家肯定都听过或用过,譬如,强大的WireShark,支持Window和Linux平台;还有linux系统的TcpDump命令行工具。作为一名嵌入式开发工程师,开发过程中,难免会遇到没有图形界面的情况,在linux系统下,此时就需要用TcpDump来进行抓包工作了,然后通过WireShark对抓包文件进行分析。
但是如果你的OS中不带有TcpDump怎么办呢?此时就需要自己针对自己的平台编译一个TcpDump了。
一、准备工作
到TcpDump官网下载tcpdump和libpcap的源码,https://www.tcpdump.org/
方法一
点击这两处,分别下载tcpdump和libpcap,tar -vzxf tcpdump-4.99.4.tar.gz
和 tar -vzxf libpcap-1.10.4.tar.gz
解压。
可能会下载不完整,导致解压失败。
方法二
通过git clone源代码。
比较慢,中途还可能会和github断连,也不是很稳定。
方法三
利用上面的URL
https://github.com/the-tcpdump-group/tcpdump
https://github.com/the-tcpdump-group/libpcap
访问github,选择方法一提供的版本的分支,此处
tcpdump就选择tcpdump-4.99这个分支,下载Zip包。
libpcap就选择libpcap-1.10这个分支,下载Zip包。
这种方式,个人觉得最稳妥。因为前面两种方式我都失败了!!! ( ̄_ ̄|||)
|||
二、编译步骤
1.创建工程
mkdir ~/tcpdump-tool // 创建工程目录
将下载好的tcpdump-tcpdump-4.99.zip和libpcap-libpcap-1.10.zip拷贝到工程目录并解压
cp tcpdump-tcpdump-4.99.zip ~/tcpdump-tool // 将tcpdump-tcpdump-4.99.zip拷贝到工程目录
cp libpcap-libpcap-1.10.zip ~/tcpdump-tool // 将libpcap-libpcap-1.10.zip拷贝到工程目录
// 解压
unzip tcpdump-tcpdump-4.99.zip
unzip libpcap-libpcap-1.10.zip
2.交叉编译
编译tcpdump需要检查时候正确安装libpcap,所以我们需要先编译libpcap。
2.1交叉编译libpcap库
cd ~/tcpdump-tool/libpcap-libpcap-1.10 // 切换工作目录
mkdir build // 创建构建目录
cd build
// 配置软件的编译选项和检查环境
../configure --host=[指定交叉编译环境的目标架构] --with-pcap=linux
cmake .. // 生成Makefile文件
make // 编译,链接,构建软件
sudo make install DESTDIR=[预安装的目录路径] // 默认路径 /usr/local
- 小白(第一次的我):交叉编译环境的目标架构是什么东西,
--host=
后面怎么配置啊? - 其他博主给的例子:
../configure --prefix=$PWD/install --host=arm-linux-gnueabihf --with-pcap=linux
- 我的应该怎么写呢?其实就是你交叉编译时的交叉编译器的名称不要最后的
-gcc
。
例如:常见的的交叉编译器arm-linux-gcc
,它的目标架构就是arm-linux
;交叉编译器arm-linux-gnueabi-gcc
的目标架构就是arm-linux-gnueabi
。
- 如果忘记自己的编译器名称怎么办呢?那你应该是配了环境的变量的,通过
echo $CC
就可以查看你的编译器名称了。
这都是默认你配好了你的交叉编译环境的情况,至少交叉编译了一个Hello World程序!!! - “emm~,其他博文在运行configure脚本的时候都加了 --prefix选项欸,你的不加没事吗?”
- 我(小白):“后退,我要开始装*了。”
- 当然没事,最后的
make install
,我指定了安装路径 ( •̀ ω •́ )✧。
其实是那个configure脚本太长了,本人又不会改,所以用这种方法。
例子:
cd ~/tcpdump-tool/libpcap-libpcap-1.10 // 切换工作目录
mkdir build // 创建构建目录
cd build
// 配置软件的编译选项和检查环境
../configure --host=arm-linux --with-pcap=linux
cmake .. // 生成Makefile文件
make // 编译,链接,构建软件
sudo make install DESTDIR=~/3Party/libpcap/ // 默认路径 /usr/local
也是不知道改configure脚本的哪里,暂时不得不操作的指令
cd ~/3Party/libpcap
//将多余的层级移除
mv usr/local/* ./
rm -r usr
2.2交叉编译tcpdump
cd ~/tcpdump-tool/tcpdump-tcpdump-4.99 // 切换工作目录
mkdir build // 创建构建目录
cd build
因为此处的configure脚本会检查你的libpcap是否正确安装,所以在同级目录下建立软连接
sudo ln -s ~/3Party/libpcap libpcap // 在此处建立libpcap的软连接
../configure --host=[指定交叉编译环境的目标架构] CFLAGS="-I./libpcap/include/ -L./libpcap/lib/"
make
例子:
sudo ln -s ~/3Party/libpcap libpcap // 在此处建立libpcap的软连接
../configure --host=arm-linux CFLAGS="-I./libpcap/include/ -L./libpcap/lib/"
make
现在ls
应该可以在当前目录下看到一个tcpdump
的二进制文件了。
file tcpdump // 检查一下是否是Arm版本
当打印信息包含“ARM aarch64”
字样,恭喜编译成功。
3.使用
将编译得到的tcpdump
程序和libpcap
库打包上传到你的开发板
// 打包程序
mkdir ~/my_tcpdump
cd ~/my_tcpdump
cp ~/tcpdump-tool/tcpdump-tcpdump-4.99/build/tcpdump ~/my_tcpdump
cp ~/3Party/libpcap/lib/libpcap.so.1.10.5-PRE_GIT ~/my_tcpdump
tar -czvf my_tcpdump.tar.gz my_tcpdump
// 上传
scp my_tcpdump.tar.gz [username]@[xxx.xxx.xxx.xxx]:/home/[username]/
开发板上使用
cd ~ // 切换到文件上传的路径
tar -xzvf my_tcpdump.tar.gz // 解压
cd my_tcpdump
sudo ln -s libpcap.so.1.10.5-PRE_GIT libpcap.so.1.10.5 // 建立软链
sudo ln -s libpcap.so.1.10.5 libpcap.so
export LD_LIBRARY_PATH=`pwd` // 添加环境变量
chmod a+x tcpdump // 更改权限
./tcpdump -i eth0 //测试使用
至此,你应该已经完成了tcpdump的交叉编译和使用测试,
------------如果感到有用,麻烦一键三连,感激--------------