NDK交叉编译tcpdump实现安卓抓包
2017-03-27 16:09
489 查看
下面介绍一下具体过程。
1.Git clone libpcap和tcpdump两个项目。
(2)返回上一目录,创建compile-tcpdump.sh,内容如下:
(上面的两个标准需要加入-pie -fPIE。PIE安全机制从安卓4.1引入,但是Android
L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。)
(3)然后执行如下命令
chmod +x ./compile-tcpdump.sh
./compile-tcpdump.sh
最终生成tcpdump可执行文件。
最新tcpdump可执行文件下载地址:(Android6.0可用)
Version: 4.9.0
/ 1.8.1
Release Date: January
18, 2017
File Size: 2057576
tcpdump 4.9.0
tcpdump 的抓包保存到文件的命令参数是-w xxx.cap
抓eth1的包
tcpdump -i eth1 -w /tmp/xxx.cap
抓 192.168.1.123的包
tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap
抓192.168.1.123的80端口的包
tcpdump -i eth1 host 192.168.1.123 and port 80 -w /tmp/xxx.cap
抓192.168.1.123的icmp的包
tcpdump -i eth1 host 192.168.1.123 and icmp -w /tmp/xxx.cap
抓192.168.1.123的80端口和110和25以外的其他端口的包
tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
抓vlan 1的包
tcpdump -i eth1 port 80 and vlan 1 -w /tmp/xxx.cap
抓pppoe的密码
tcpdump -i eth1 pppoes -w /tmp/xxx.cap
以100m大小分割保存文件, 超过100m另开一个文件 -C 100m
抓10000个包后退出 -c 10000
后台抓包, 控制台退出也不会影响:
nohup tcpdump -i eth1 port 110 -w /tmp/xxx.cap &
抓下来的文件可以直接用ethereal 或者wireshark打开。
1、下载并安装tcpdump
请用NDK编译最新tcpdump,或者从上面的下载地址下载。
安装tcpdump,命令行模式依次执行:
其中adb push的第一个参数为本地tcpdump的路径。
2、启动并运行tcpdump
命令行模式运行下面命令:
这时在手机上做任何涉及到网络的操作都会在屏幕上打印出来,可以通过ctrl+c停止。
由于命令行最大输出的限制及屏幕不断滚动,查看不方便,我们可以将抓取的网络包保存到sd卡,如下命令:
依然通过ctrl+c停止,将文件拉取到本地PC
通过–help我们发现tcpdump支持如下参数:
tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]
[ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -Z user ]
[ expression ]
其中-c表示监控的请求个数;-C表示存储文件的最大大小;
-i表示监控的类型;-s表示抓取的网络请求返回的大小,0表示抓取整个网络包;-w表示抓取的包保存的文件路径,此时不会在标准输出打印。并且可以添加port参数表示端口。
3、利用wireshark分析数据
wireshark下载地址,中文版地址:http://www.onlinedown.net/softdown/2883_2.htm,英文版地址(需要翻墙):http://www.wireshark.org/download.html
用wireshark打开capture.pcap即可分析log
关于wireshark具体可见:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
1.Git clone libpcap和tcpdump两个项目。
git clone https://github.com/the-tcpdump-group/tcpdump.git[/code]git clone https://github.com/the-tcpdump-group/libpcap.git[/code] 2.编译libpcap:
(1)进入libpcap目录,打开configure。将下面两端代码注释掉
#if test -z "$with_pcap" && test "$cross_compiling" = yes; then
# { { echo "$as_me:$LINENO: error: pcap type not determined when cross-compiling; use --with-pcap=..." >&5
#echo "$as_me: error: pcap type not determined when cross-compiling; use --with-pcap=..." >&2;}
# { (exit 1); exit 1; }; }
#fi
.......
# if test $ac_cv_linux_vers = unknown ; then
# { { echo "$as_me:$LINENO: error: cannot determine Linux version when cross-compiling" >&5
#echo "$as_me: error: cannot determine linux version when cross-compiling" >&2;}
# { (exit 1); exit 1; }; }
# fi
(如果不注释掉上面两段代码,可能会出现determine linux version when cross-compiling或pcap type not determined when cross-compiling导致无法configure)。
(2)返回上一目录,创建compile-pcap.sh,内容如下:#!/bin/bash BASEPATH=$(cd `dirname $0`; pwd) cd libpcap-master export NDK=/root/Documents/android-ndk-r10e export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt export PLATFORM=$NDK/platforms/android-8/arch-arm export PREFIX=$BASEPATH/build/libpcap build_pcap() { ./configure --host=arm-linux \ CC="$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$PLATFORM" \ --prefix=$PREFIX } build_pcap make make install cd ..(3)然后执行如下命令chmod +x ./compile-pcap.sh ./compile-pcap.sh
3.编译tcpdump
(1)进入tcpdump目录,打开configure,将下面一段代码注释掉
# if test $ac_cv_linux_vers = unknown ; then
# { { echo "$as_me:$LINENO: error: cannot determine linux version when cross-compiling" >&5
#echo "$as_me: error: cannot determine linux version when cross-compiling" >&2;}
# { (exit 1); exit 1; }; }
# fi
(2)返回上一目录,创建compile-tcpdump.sh,内容如下:
#!/bin/bash BASEPATH=$(cd `dirname $0`; pwd) cd tcpdump-master export NDK=/root/Documents/android-ndk-r10e export PREBUILT=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt export PLATFORM=$NDK/platforms/android-8/arch-arm export PREFIX=$BASEPATH/build/tcpdump export LIBPCAP=$BASEPATH/build/libpcap build_tcpdump() { ./configure --host=arm-linux \ --target=arm-linux \ CC="$PREBUILT/linux-x86_64/bin/arm-linux-androideabi-gcc --sysroot=$PLATFORM" \ ac_cv_linux_vers=2 \ CFLAGS="-I$LIBPCAP/include -pie -fPIE" \ LDFLAGS="-L$LIBPCAP/lib -pie -fPIE" \ --prefix=$PREFIX } build_tcpdump make make install cd ..
(上面的两个标准需要加入-pie -fPIE。PIE安全机制从安卓4.1引入,但是Android
L之前的系统版本并不会去检验可执行文件是否基于PIE编译出的。因此不会报错。但是Android L已经开启验证,如果调用的可执行文件不是基于PIE方式编译的,则无法运行。)
(3)然后执行如下命令
chmod +x ./compile-tcpdump.sh
./compile-tcpdump.sh
最终生成tcpdump可执行文件。
最新tcpdump可执行文件下载地址:(Android6.0可用)
Version: 4.9.0
/ 1.8.1
Release Date: January
18, 2017
File Size: 2057576
tcpdump 4.9.0
tcpdump抓包的简单命令
tcpdump 的抓包保存到文件的命令参数是-w xxx.cap抓eth1的包
tcpdump -i eth1 -w /tmp/xxx.cap
抓 192.168.1.123的包
tcpdump -i eth1 host 192.168.1.123 -w /tmp/xxx.cap
抓192.168.1.123的80端口的包
tcpdump -i eth1 host 192.168.1.123 and port 80 -w /tmp/xxx.cap
抓192.168.1.123的icmp的包
tcpdump -i eth1 host 192.168.1.123 and icmp -w /tmp/xxx.cap
抓192.168.1.123的80端口和110和25以外的其他端口的包
tcpdump -i eth1 host 192.168.1.123 and ! port 80 and ! port 25 and ! port 110 -w /tmp/xxx.cap
抓vlan 1的包
tcpdump -i eth1 port 80 and vlan 1 -w /tmp/xxx.cap
抓pppoe的密码
tcpdump -i eth1 pppoes -w /tmp/xxx.cap
以100m大小分割保存文件, 超过100m另开一个文件 -C 100m
抓10000个包后退出 -c 10000
后台抓包, 控制台退出也不会影响:
nohup tcpdump -i eth1 port 110 -w /tmp/xxx.cap &
抓下来的文件可以直接用ethereal 或者wireshark打开。
tcpdump抓包使用示例
1、下载并安装tcpdump请用NDK编译最新tcpdump,或者从上面的下载地址下载。
安装tcpdump,命令行模式依次执行:
1 2 3 | adb root adb push tcpdump /data/local/tcpdump adb shell chmod 6755 /data/local/tcpdump |
2、启动并运行tcpdump
命令行模式运行下面命令:
1 | adb shell /data/local/tcpdump -n -s 0 |
由于命令行最大输出的限制及屏幕不断滚动,查看不方便,我们可以将抓取的网络包保存到sd卡,如下命令:
1 | adb shell /data/local/tcpdump -i any -p -s 0 -w /sdcard/netCapture.pcap |
1 | adb pull /sdcard/netCapture.pcap . |
tcpdump [-aAdDeflLnNOpqRStuUvxX] [-c count] [ -C file_size ]
[ -E algo:secret ] [ -F file ] [ -i interface ] [ -M secret ]
[ -r file ] [ -s snaplen ] [ -T type ] [ -w file ]
[ -W filecount ] [ -y datalinktype ] [ -Z user ]
[ expression ]
其中-c表示监控的请求个数;-C表示存储文件的最大大小;
-i表示监控的类型;-s表示抓取的网络请求返回的大小,0表示抓取整个网络包;-w表示抓取的包保存的文件路径,此时不会在标准输出打印。并且可以添加port参数表示端口。
3、利用wireshark分析数据
wireshark下载地址,中文版地址:http://www.onlinedown.net/softdown/2883_2.htm,英文版地址(需要翻墙):http://www.wireshark.org/download.html
用wireshark打开capture.pcap即可分析log
关于wireshark具体可见:http://www.cnblogs.com/TankXiao/archive/2012/10/10/2711777.html
相关文章推荐
- NDK编译时,报错error: undefined reference to 'rand',是不是安卓库函数里面没有这个函数的实现呢?
- 安卓NDK制作标准交叉编译工具链
- Cpufreq应用程序在arm开发板端的交叉编译及实现
- NDK编译PKCS#11接口实现时需要OpenSSL的库的解决办法。
- 利用ndk交叉编译x264到arm平台(带neon版本)
- 【cocos2d-x入门实战】环境配置、交叉编译及安卓项目的生成
- 抛弃cygwin,使用Android SDK+NDK编译Cocos2d-x安卓程序
- 初探 c/c++ 与 汇编 之间的交叉编译 命令行实现
- 基于TcpDump和pcap文件分析的Android平台网络抓包程序设计与实现【随便】
- 利用ndk交叉编译x264到arm平台(带neon版本)
- cocos2d-x win32程序和NDK交叉编译
- [cocos2d-x]环境配置、交叉编译及安卓项目的生成
- 交叉编译TCPDUMP
- 交叉编译mentohust实现锐捷认证共享上网
- 嵌入式交叉编译tcpdump
- 安卓ndk 中间件编译(初级)
- 用NDK搭建Android的交叉编译环境[zz]
- 【Android Native Code开发系列】七 使用NDK进行交叉编译 & 编译ACE for android
- 建立交叉编译环境和在开发板上实现第一个嵌入式Linux应用程序
- 如何实现protobuf在XCODE上armv7/armv7s/i386的交叉编译