NDK交叉編譯tcpdump實現安卓抓包

2021-07-29 14:58:14 字數 4461 閱讀 8275

下面介紹一下具體過程。

1.git clone libpcap和tcpdump兩個專案。

git clone
git clone
2.編譯libpcap:

(1)進入libpcap目錄,開啟configure。將下面兩端**注釋掉

#if test -z "$with_pcap" && test "$cross_compiling" = yes; then

# # ; }

#fi.......

# if test $ac_cv_linux_vers = unknown ; then

#

# ; }

# 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()

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

#

# ; }

# 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()

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可執行檔案。

version: 

4.9.0 / 1.8.1

release date: 

january 18, 2017

file size: 

2057576

tcpdump 4.9.0

tcpdump 的抓包儲存到檔案的命令引數是-w ***.cap

抓eth1的包 

tcpdump -i eth1 -w /tmp/***.cap 

抓 192.168.1.123的包 

tcpdump -i eth1 host 192.168.1.123 -w /tmp/***.cap 

抓192.168.1.123的80埠的包 

tcpdump -i eth1 host 192.168.1.123 and port 80 -w /tmp/***.cap 

抓192.168.1.123的icmp的包 

tcpdump -i eth1 host 192.168.1.123 and icmp -w /tmp/***.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/***.cap 

抓vlan 1的包 

tcpdump -i eth1 port 80 and vlan 1 -w /tmp/***.cap 

抓pppoe的密碼 

tcpdump -i eth1 pppoes -w /tmp/***.cap 

以100m大小分割儲存檔案, 超過100m另開乙個檔案 -c 100m 

抓10000個包後退出 -c 10000 

後台抓包, 控制台退出也不會影響: 

nohup tcpdump -i eth1 port 110 -w /tmp/***.cap & 

抓下來的檔案可以直接用ethereal 或者wireshark開啟。

1

tcpdump

安裝tcpdump

,命令列模式依次執行: 1

23adb root

adb push tcpdump /data/local/tcpdump

adb shell chmod 6755 /data/local/tcpdump

其中adb push

的第乙個引數為本地

tcpdump

的路徑。

2

、啟動並執行

tcpdump

命令列模式執行下面命令: 1

adb shell /data/local/tcpdump -n -s 0

這時在手機上做任何涉及到網路的操作都會在螢幕上列印出來,可以通過

ctrl+c

停止。

由於命令列最大輸出的限制及螢幕不斷滾動,檢視不方便,我們可以將抓取的網路包儲存到

sd卡,如下命令: 1

adb shell /data/local/tcpdump -i any -p -s 0 -w /sdcard/netcapture.pcap

依然通過

ctrl+c

停止,將檔案拉取到本地pc

1adb pull /sdcard/netcapture.pcap .

通過–help

我們發現

tcpdump

支援如下引數:

tcpdump [-aaddefllnnopqrstuuvxx] [-c count] [ -c file_size ]

[ -e algo:secret ] [ -f file ] [ -i inte***ce ] [ -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

,英文版位址

(需要翻牆):

用wireshark

開啟capture.pcap

即可分析

log關於

wireshark

具體可見:

tcpdump 交叉編譯移植(mips)

一 libpcap 交叉編譯 1libpcap 1.8.1 2 解壓 3 修改configure檔案 a 注釋掉 if test z with pcap test cross compiling yes then as fn error pcap type not determined whencr...

tcpdump交叉編譯及使用

tar zxvf libpcap 1.4.0.tar.gz2.2 進入解壓目錄 cd libpcap 1.4.0 2.3 配置生成makefile檔案 cc arm none linux gnueabi gcc ac cv linux vers 2 configure host arm linux ...

arm開發 交叉編譯及tcpdump

命名規則 arch vendor kernel system arch 體系架構,如arm,mips vendor 工具鏈提供商 kernel 目標核心 system 目標系統 build 編譯該軟體所使用的平台 host 該軟體將執行的平台 target 該軟體所處理的目標平台 wget tar ...