站在巨人的肩上
tcpdump是一個運行在命令行的數(shù)據(jù)網(wǎng)絡抓包工具呛梆,它允許用戶攔截和顯示發(fā)送或收到過網(wǎng)絡連接到該計算機的TCP/IP和其他數(shù)據(jù)包搪泳。
一. 準備
??設備具有root權(quán)限
??tcpdump 二進制文件
??wireshark 軟件
二.安裝
??通過adb命令在設備端安裝tcpdump,安裝的目的主要是需要通過tcpdump采集網(wǎng)絡數(shù)據(jù)包
adb shell #登入shell環(huán)境
su #切換Root用戶
chmod 777 /data/local/ #修改目錄權(quán)限姿现,修改后Ctrl+C退出adb shell
adb push tcpdump /data/local/tcpdump (上傳文件至設備)
adb shell chmod 6755 /data/local/tcpdump (設置tcpdump權(quán)限)
電腦端安裝wireshark 軟件肠仪,用于分析已抓取到的網(wǎng)絡數(shù)據(jù)包,和其他軟件安裝的方式無差異备典,略
三. 使用
??抓包
adb shell
su
/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap
獲取結(jié)果异旧,PC端可以使用wireshark查看數(shù)據(jù)包
adb pull /sdcard/capture.pcap(將數(shù)據(jù)包復制到電腦中)
四. 遇到的問題
??使用android 6.0系統(tǒng)的手機 tcpdump抓包時,報error: only position independent executables (PIE) are supported.
報錯原因:PIE安全機制所引起的提佣,從Android4.1開始引入該機制吮蛹,Android L之前的系統(tǒng)版本并不會去檢驗可執(zhí)行文件是否基于PIE編譯出的。因此不會報錯拌屏。但是Android L已經(jīng)開啟驗證潮针,如果調(diào)用的可執(zhí)行文件不是基于PIE方式編譯的,無法使用倚喂。
解決方案:由于tcpdump是開源的然低,重編譯tcpdump的時候加上如下的flag就行。
LOCAL_CFLAGS += -pie -fPIE
LOCAL_LDFLAGS += -pie -fPIE
PS:由于有前輩已經(jīng)新編譯好了的tcpdump务唐,并經(jīng)測試ok雳攘,不再折騰怎么去編譯,后面附上大神博客枫笛,感謝吨灭。
[參考博客1]http://vjson.com/wordpress/compile-tcpdump-for-android-lollipop.html
[參考博客2]http://www.reibang.com/p/ca6cdc825ad3