标签归档:tcpdump

编译适用于Android-x86架构的tcpdump工具

在谷歌和必应上搜索的Android-x86专用的tcpdump工具多半不能使用,它们基本上都是在ARM架构的安卓手机上使用的,而且版本都较为老旧。由于Android-x86的Linux内核是通用的32位Linux,那么能否在常用的32位Linux发行版上直接使用32位的gcc编译tcpdump,然后拷贝至Android-x86的模拟器中使用呢?答案是可以的!

一、环境说明

Linux虚拟主机:CentOS 6.6 i686
宿主机OS:Windows 7 SP1
宿主机IP:192.168.92.1
虚拟机软件:VMware Workstation 11.0
虚拟机系统:Android-x86 4.4 r2
虚拟机CPU:单核
虚拟机内存:1 GB
虚拟机硬盘:8 GB
虚拟机联网方式:Host-Only
虚拟机IP:192.168.92.128
虚拟机SSHD软件:SSHDroid
虚拟机SSH链接:root@192.168.92.128:2222
tcpdump版本:4.7.4
libpcap版本:1.7.3

注意:
本文使用三台主机,配置如上文所述:
1、承载虚拟机的Windows 7宿主机,代号为Host-1;
2、用于编译的CentOS虚拟机,代号为Host-2;
3、用于验证使用的Android-x86虚拟机,代号为Host-3。

二、编译TCPDUMP

本章节中的操作都是在Host-2上完成的,详细步骤如下所示:

1. 安装编译环境:

  1. yum groupinstall -y "Development Tools"
  2. yum install -y glibc-static

2. 下载源码包:

  1. cd /root/Downloads
  2. wget http://www.tcpdump.org/release/tcpdump-4.7.4.tar.gz
  3. wget http://www.tcpdump.org/release/libpcap-1.7.3.tar.gz

3. 解压缩:

  1. tar xvzf libpcap-1.7.3.tar.gz
  2. tar xvzf tcpdump-4.7.4.tar.gz

4. 编译libpcap:

  1. cd libpcap-1.7.3
  2. export CC=gcc
  3. ./configure --host=i686-pc-linux-gnu --with-pcap=linux
  4. make
  5. cd ..

5. 编译tcpdump:

  1. cd tcpdump-4.7.4
  2. export ac_cv_linux_vers=2
  3. export CFLAGS=-static
  4. export CPPFLAGS=-static
  5. export LDFLAGS=-static
  6. ./configure --host=i686-pc-linux-gnu --disable-ipv6
  7. make

6. 查看编译结果:

  1. file tcpdump

如果看到下图中的结果输出,则表明编译成功:

三、安装和验证

在Host-1上,通过Xshell和Xftp连接至Host-3(Android-x86虚拟机),然后:

1. 上传tcpdump:

从Host-2中,将前文编译好的tcpdump可执行文件拷贝至Host-1中,然后通过Xftp将tcpdump拷贝至Host-3的/data/local目录中,并且将tcpdump文件的权限修改为777。

2. 运行tcpdump:

Host-1的Xshell已经链接至Host-3,则在Xshell中运行以下命令:

  1. ./tcpdump -i eth0 -n icmp and src host 192.168.92.1

在Host-1的命令行窗口中运行以下命令:

  1. ping 192.168.92.128

如果在Xshell中能够看到下图中的输出,则表明安装成功:

四、后续

如果想要自行为基于ARM的安卓手机或开发板编译tcpdump工具,则可以参考以下文章:

  1. Monitoring Android Network Traffic Part I: Installing The Toolchain | Symantec Connect Community http://www.symantec.com/connect/blogs/monitoring-android-network-traffic-part-i-installing-toolchain

  2. Monitoring Android Network Traffic Part II: Cross Compiling TCPDUMP | Symantec Connect Community
    http://www.symantec.com/connect/blogs/monitoring-android-network-traffic-part-ii-cross-compiling-tcpdump

  3. Monitoring Android Network Traffic Part III: Installing & Executing TCPDUMP | Symantec Connect Community
    http://www.symantec.com/connect/blogs/monitoring-android-network-traffic-part-iii-installing-executing-tcpdump

编译适用于Android-ARM架构的tcpdump工具

零、准备工作

  1. 安装 Debian 7.8 X86_64
  2. 准备一台有root权限的Android手机
  3. 用root账户登录Debian系统

一、安装交叉编译工具链

1. 安装Emdebian软件仓库的GPG密钥

  1. apt-get install emdebian-archive-keyring

2. 安装Emdebian需要的Squeeze依赖

  1. apt-get install flex
  2. apt-get install byacc
  3. apt-get install make
  4. vi /etc/apt/sources.list

在上述文件最后添加如下内容:

  1. deb http://ftp.us.debian.org/debian/ squeeze main
  2. deb http://security.debian.org/ squeeze/updates main
  3. deb http://www.emdebian.org/debian/ squeeze main

注意:

第一行启用Debian Squeeze的软件仓库,以便于满足Emdebian工具链的依赖;
第二行启用Debian Squeeze的安全更新仓库;
第三行启用Emdebian的软件仓库。

3. 同步Debian软件包的索引文件

  1. apt-get update

4. 安装ARM GNU C++编译器

  1. apt-get install g++-4.4-arm-linux-gnueabi

5. 检查交叉编译器是否安装成功

  1. arm-linux-gnueabi-gcc --version

若上述命令的返回如下所示,则表示安装成功:

二、交叉编译TCPDUMP

1. 下载libpcap和tcpdump的源码包

  1. cd /root/Downloads
  2. wget http://www.tcpdump.org/release/tcpdump-4.7.4.tar.gz
  3. wget http://www.tcpdump.org/release/libpcap-1.7.3.tar.gz

2. 解压缩源码包

  1. tar xvzf libpcap-1.7.3.tar.gz
  2. tar xvzf tcpdump-4.7.4.tar.gz

3. 编译libpcap

  1. cd libpcap-1.7.3
  2. export CC=arm-linux-gnueabi-gcc
  3. ./configure --host=arm-linux --with-pcap=linux
  4. make
  5. cd ..

4. 编译tcpdump

  1. cd tcpdump-4.7.4
  2. export ac_cv_linux_vers=3
  3. export CFLAGS=-static
  4. export CPPFLAGS=-static
  5. export LDFLAGS=-static
  6. ./configure --host=arm-linux --disable-ipv6
  7. make

5. 检查编译是否成功

  1. file tcpdump

若上述命令的输出如下图所示,则表明编译成功:

6. 压缩可执行文件

  1. arm-linux-gnueabi-strip tcpdump

这一步可以将可执行文件的体积减少将近40%

三、安装和执行tcpdump

1. 安装ADB(Android Debug Bridge)软件包

  1. apt-get install android-tools-adb

2. 打开手机的USB调试功能

这个步骤每种手机可能各不相同,请参考对应型号手机的帮助文档
若手机没有完全root,则需要安装adbd.apk应用。

3. 检查手机是否连接成功

  1. adb devices

若上述命令的输出如下图所示,则表明手机已经成功连接:

4. 重新启动ADB后台

  1. adb root
  2. adb remount

注意:

第一条命令会以root账户重新启动ADB后台程序;
第二条命令会将/system分区以/read/write模式重新挂载

5. 检查ADB后台是否成功重新启动

  1. adb shell id

若上述命令的输出如下图所示,则表示ADB后台程序重新启动成功:

6. 上传tcpdump可执行文件

  1. cd /root/Downloads/tcpdump-4.7.4
  2. adb push tcpdump /system/xbin/

7. 检查tcpdump是否安装成功

  1. adb shell tcpdump -h

若上述命令的输出如下图所示,则表示tcpdump已经在手机上安装成功: