在嵌入式设备上移植tcpdump功能

最近研究了下如何在嵌入式设备上移植tcpdump的功能,tcpdump是一款款用来截取网络数据的工具,在嵌入式系统中常用来抓取和分析网络数据包。在这里我们着重讲下如何在嵌入式的系统中使用tcpdump。

1. 下载libpcap源码和tcpdump源码

可能有人会问,为什么要下载libpcap源码呢?我只是安装个tcpdump,不想安装libpcap啊。但其实你在安装tcpdump时就会发现,tcpdump的编译过程是基于libpcap提供的库文件进行操作的,这点也可以在tcpdump的configure文件中找到说明。

下载源码的链接地址:http://www.tcpdump.org/,这里我下载的版本是libpcap-libpcap-1.4.zip和tcpdump-tcpdump-4.4.0.zip。后面的操作都是基于这两个版本进行的。(注意:可能不同的版本操作方法可能有些不同,但主要流程是一样的)

2. 解压源码

将下载的源码解压到同一个目录下,这里我使用的目录是~/tcpdump/package/。使用解压命令:

unzip  libpcap-libpcap-1.4.zip
unzip  tcpdump-tcpdump-4.4.0.zip

3. 配置、编译、安装libpcap

由于libpcap和tcpdump的源码编译所需要的Makefile文件是由confirgure配置而自动生成的,因此需要先对源码进行配置,生成Makefile文件。

  • 配置libpcap源码命令
./configure --prefix=/home/linux/tcpdump/tools --host=arm-xilinx-linux-gnueabi --target=arm-xilinx-linux-gnueabi CC=arm-xilinx-linux-gnueabi-gcc --with-pcap=linux
  • 编译libpcap

make
  • 安装libpcap

make install

编译成功后会在~/tcpdump/tools目录下生成三个个文件夹bin, include和lib;里面包含了libpcap的头文件, 库及配置信息。如果编译时提示arm-xilinx-linux-gnueabi-gcc不存在,那就修改下开发环境中的/etc/profile中的最后一行增加下你的交叉编译工具链的绝对路径:export PATH=$PATH:/work/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin

4. 配置、编译、安装tcpdump

  • 配置tcpdump源码命令
./configure --prefix=/home/linux/tcpdump/tools --host=arm-xilinx-linux-gnueabi --target=arm-xilinx-linux-gnueabi CC=arm-xilinx-linux-gnueabi-gcc ac_cv_linux_vers=2
  • 编译libpcap

make
  • 安装libpcap

make install

编译完成后会在~/tcpdump/tools/sbin目录下找到独立的可执行文件tcpdump

这里需要说明的是CC参数指定了交叉编译器, 编译两者时需要指定相同的目录, 否则在编译tcpdump时需要指定libpcap的路径。

注意:tcpdump的源码必须要与libpcap源码放在同一个目录下,因为在配置tcpdump时,在configure文件中会检查libpcap文件,所以必须放在同一个目录下,而且文件名也是有要求的,必须是libpcap-xxx。如果libpcap文件夹的名称不是libpcap-xxx类型,就会报如下错误。在tcpdump文件的configure中,可以看到对文件名称的限制。

5. 运行

将编译好的tcpdump可执行文件下载到板卡上,可以直接利用tcpdump来抓取网络端口的数据包了。如果觉得编译出来的可执行文件较大,可以利用arm-xilinx-linux-gnueabi-strip tcpdump来进行瘦身。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值