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