转载请注明出处:https://mp.csdn.net/postedit/86597115
1.什么是tcpdump?
Tcpdump可以将网络中传送的数据包完全截获下来提供分析。它支持针对网络层、协议、主机、网络或端口的过滤,并提供and、or、not等逻辑语句来帮助你去掉无用的信息。
2.问题描述
在Android 7.0下,使用tcpdump抓包,出现如下错误:
error: Android 5.0 and later only support position-independent executables (-fPIE).
这是由于PIE安全机制引起的,从Android4.1引入该机制,在Android L 也就是Lollipop之前,并不会去检验可执行文件是否基于PIE编译出来的,因此不会报错,但是Android L已经开始验证,如果电泳的可执行文件不是基于PIE编译的,则无法运行。解决方法很简单,就是重新编译下,加上如下flag就行。
LOCAL_CFLAGS +=-pie -fPIE
LOCAL_LDFLAGS +=-pie -fPIE
3.前期准备
系统环境:Ubuntu
Android NDK
源码:libpcap v1.9.0,tcpdump v4.9.2,下载地址为:libpcap-1.9.0.tar.gz和tcpdump-4.9.2.tar.gz
编译前首先检查有没有lex和yacc工具,没有的话则执行如下命令:
sudo apt-get install flex bison
3.1 NDK环境搭建
3.1.1 下载ndk,命令如下:
wget -c http://dl.google.com.android/ndk/android-ndk64-r10b-linux-86_64.tar.bz2
3.1.2 解压
将下载好的ndk包解压到指定目录(此处的/home/li是我的机器的用户名,此目录根据个人情况随意更换),命令如下:
sudo tar -C /home/li/ -xvf android-ndk64-r10b-linux-86_64.tar.bz2
3.1.3 配置环境变量
sudo gedit ~/.bashrc
添加如下代码:
export ND