构建
有多种构建或编译 Android tcpdump 的方法。下面概述的方法是我们用来构建 Android tcpdump二进制文件的方法,您可以在我们的下载部分找到它。您也可以尝试使用来自 Google的NDK。NDK 使用一组不同的库、工具链和编译工具。
我们在下载部分提供的tcpdump是使用一种称为交叉编译的方法编译的。交叉编译是一种在另一个操作系统上编译一个操作系统二进制文件的方法。在我们的例子中,我们正在Ubuntu Linux系统上交叉编译Android二进制文件,目标是ARM架构。创建二进制文件或程序后,它只能在目标操作系统上运行。因此二进制文件只能在运行在 ARM 架构上的 Android 设备上运行。
旁注:架构可以是 ARM、i386 或 MIPS。市场上 95% 的 Android 都使用 ARM 架构,因此您将在我们的下载中找到的二进制文件适用于 ARM 架构。此外,我们只能访问具有 ARM 架构的设备,因此我们无法确认为其他架构编译的二进制文件是否有效。如果您希望我们为 i386 或 MIPS 编译二进制文件,请在我们的联系页面中告知我们,以便我们做出适当的安排。
Ubuntu 编译工具
要安装我们使用的编译工具和工具链,请在您的 Ubuntu Linux 服务器上执行以下命令:
要编译 32 位版本,您需要以下 gcc 编译器:
sudo apt-get install gcc-arm-linux-gnueabi
要编译 64 位版本,您需要以下 gcc 编译器:
apt-get install gcc-aarch64-linux-gnu
您可能还需要以下依赖项:
sudo apt-get install byacc
sudo apt-get install flex
注意:您只需要在您的系统上安装上述编译工具一次。
编译Android tcpdump的步骤
- 从http://www.tcpdump.org下载最新的tcpdump源代码。在这种情况下,我们将编译最新版本 tcpdump-4.99.1。
wget http://www.tcpdump.org/release/tcpdump-4.99.1.tar.gz
- 由于 tcpdump 依赖于 libpcap,我们也需要下载它。从http://www.tcpdump.org下载最新的 libpcap 源代码
wget http://www.tcpdump.org/release/libpcap-1.10.1.tar.gz
- 将源代码解压到相应的目录中。
tar zxvf tcpdump-4.99.1.tar.gz
tar zxvf libpcap-1.10.1.tar.gz
- 导出编译器以指向 ARM Linux 构建工具。注意:默认情况下,这些库在您的 linux 操作系统上可能不可用。您可能需要“yum”或“apt-get”适当的构建库或工具链。对于 32 位,您需要:
export CC=arm-linux-gnueabi-gcc
- 对于 64 位编译,您将需要:
export CC=aarch64-linux-gnu-gcc
- 我们需要先编译LIBPCAP。将目录更改为解压缩 LIBPCAP 的位置
cd libpcap-1.10.1
- 使用几个开关执行 LIBPCAP 附带的配置文件。“--host=arm-linux”告诉编译器我们正在交叉编译到ARM。“--with-pcap=linux”将告诉编译器我们正在编译哪种数据包捕获类型。
./configure --host=arm-linux --with-pcap=linux
- 然后执行“make”命令。这应该会创建 libpcap 库。
make
- 现在,将目录更改为提取 TCPDUMP 文件的位置
cd tcpdump-4.99.1
- 我们需要找出我们的 Ubuntu(或 Linux)操作系统内核正在运行的主要版本。执行 uname -a 命令。注意:您的输出可能会有所不同,但请查找类似于版本号的内容。下面,我的是 2.6.32-042stab094.8。我们抓住第一个“2”。
uname -a
上述命令产生以下输出:
Linux androidtcpdump 2.6.32-042stab094.8 #1 SMP Tue Dec 16 20:36:56 MSK 2014 i686 i686 i686 GNU/Linux
- 将 ac_cv_linux_vers 变量设置为上一个命令中发布的内核版本的主要编号。
export ac_cs_linux_vers=2
- 导出编译所需的以下变量。由于我们希望可执行文件是自包含的(即不依赖于外部库,因此我们提供了以下标志来静态构建它。
export CFLAGS=-static
export CPPFLAGS=-static
export LDFLAGS=-static
- 使用几个开关执行 TCPDUMP 附带的配置文件。“--host=arm-linux”告诉编译器我们正在交叉编译,“--disable-ipv6”告诉编译器禁用 IP 版本 6。
./configure --host=arm-linux --disable-ipv6
- 执行“制作”命令。这将构建 tcpdump 二进制文件。
make
- 剥离符号信息,使二进制文件更小。这些符号仅在调试应用程序时有用。对于 32 位:
arm-linux-gnueabi-strip tcpdump
- 对于 64 位:
aarch64-linux-gnu-strip tcpdump
- 完毕。您完成的二进制文件应该在您的 tcpdump 目录中。
多合一脚本(32 位)
下面是一个简单的脚本中列出的所有步骤。您只需要更改“ac_cv_linux_vers”变量中的版本信息和您的 linux 内核版本
export TCPDUMP=4.99.1
export LIBPCAP=1.10.1
wget http://www.tcpdump.org/release/tcpdump-$TCPDUMP.tar.gz
wget http://www.tcpdump.org/release/libpcap-$LIBPCAP.tar.gz
tar zxvf tcpdump-$TCPDUMP.tar.gz
tar zxvf libpcap-$LIBPCAP.tar.gz
export CC=arm-linux-gnueabi-gcc
cd libpcap-$LIBPCAP
./configure --host=arm-linux --with-pcap=linux
make
cd ..
cd tcpdump-$TCPDUMP
export ac_cv_linux_vers=2
export CFLAGS=-static
export CPPFLAGS=-static
export LDFLAGS=-static
./configure --host=arm-linux --disable-ipv6
make
arm-linux-gnueabi-strip tcpdump
多合一脚本(64 位)
下面是一个简单的脚本中列出的所有步骤。您只需要更改“ac_cv_linux_vers”变量中的版本信息和您的 linux 内核版本
export TCPDUMP=4.99.1
export LIBPCAP=1.10.1
wget http://www.tcpdump.org/release/tcpdump-$TCPDUMP.tar.gz
wget http://www.tcpdump.org/release/libpcap-$LIBPCAP.tar.gz
tar zxvf tcpdump-$TCPDUMP.tar.gz
tar zxvf libpcap-$LIBPCAP.tar.gz
eport CC=aarch64-linux-gnu-gcc
cd libpcap-$LIBPCAP
./configure --host=arm-linux --with-pcap=linux
make
cd ..
cd tcpdump-$TCPDUMP
export ac_cv_linux_vers=2
export CFLAGS=-static
export CPPFLAGS=-static
export LDFLAGS=-static
./configure --host=arm-linux --disable-ipv6
make
aarch64-linux-gnu-strip tcpdump
你完成了。
现在你有了我们用来构建 android tcpdump的指令。但是有编译/构建的替代方法。如果您无法访问 Linux 系统,或者遇到编译困难,您可以随时从我们的下载区域下载最新版本。就这么简单。