導航:首頁 > 操作系統 > android網路數據抓包

android網路數據抓包

發布時間:2023-05-04 00:54:40

Ⅰ 如何在 android 手機上實現抓包

千鋒扣丁學堂Android開發為您解答:
tcpmp是最快捷方便的抓包方式,還可以加深對網路協議的理解。android下可以通過如下方式抓包:

1 Android上啟動tcpmp

Android設備可以把tcpmp的可執行文件上傳到android設備上,然後通過mac遠程登錄android設備運行tcpmp,前提是這台android設備必須已經root過。步驟如下:

下載android版本的tcpmp為android系統編譯的tcpmp版本。

通過adb將tcpmp上傳到android設備

通過adb push將tcpmp文件上傳到特定的目錄,這里我們選擇/sdcard/data目錄。

在android設備上運行tcpmp

通過adb shell登陸設備,並執行tcpmp,最後一步執行./tcpmp即可。

2. 分析tcpmp輸出

經過上面的步驟成功運行tcpmp之後,接下來就可以分析輸出的網路包內容了,iOS設備和Android設備的輸出是一致的。我們先來解析下幾個基本的格式:

圖中紅色方框內的部分是一個ip包的詳細記錄,類似的紀錄還有好幾條。這里我們著重分析第一條的各部分欄位含義。

14:37:41.615018 很簡單,是該包接收到的時間。

17.143.164.37.5223 是發送方的ip地址及埠號(5223是埠號)。

10.29.44.140.58036 是我android的ip地址及埠號。

Flags [P.]
是tcp包header部分的第14個位元組的P位。這個位元組所包含的幾個flag很重要,後面我會單獨詳細講解。這里P位表示接受方需要馬上將包push到應用層。

seq 1:54
tcp包的seq號,1是起始值,54結束值。tcp之所以被認為是流,是因為tcp包所攜帶的每一個位元組都有標號(seq號)。1:54表明總共有54個位元組被接受,其中一個位元組是三次握手階段所使用,所以一共發送的長度是53位元組。

ack 101 tcp包的ack號,ack 101表明seq號為100的位元組已被確認收到,下一個期望接收的seq號從101開始。

win 255 win表示的是tcp包發送方,作為接受方還可以接受的位元組數。這里win
255表明ip為17.143.164.37的主機還可以接受255個位元組。

options [nop,nop,…] options[…]表示的是該tcp包的options區域,nop是no
opertion的縮寫,沒什麼實際用途,主要是用做padding,因為options區域按協議規定必須是4位元組的倍數。

options[… TS val 2381386761] ts
val這個值是tcp包的時間戳,不過這個時間戳和設備的系統時間沒啥關系,剛開始是隨機值,後面隨著系統時鍾自增長。這個時間戳主要用處是seq序列號越界從0重新開始後,可以確認包的順序。

options[… ecr 427050796] ts ecr這個值主要用來計算RTT。比如A發送一個tcp包給B,A會在包里帶上TS
val,B收到之後在ack包里再把這個值原樣返回,A收到B的ack包之後再根據本地時鍾就可以計算出RTT了。這個值只在ack包里有效,非ack包ecr的值就為0.

length 53 這個length是應用層傳過來的數據大小,不包括tcp的header。這個值和我們上面分析的seq 1:54是一致的。

以上就是一個基本的tcp包結構,大家可以按照上面的分析再把其他幾個包理解下。我們在做應用的時候面對的更多是http協議,但對一個http請求是怎麼通過tcp/ip分解成一個個的packet,然後怎麼在網路上穩定可靠的傳輸,要有個基本的印象。下面我們再看下tcpmp更多的功能,這些功能都是基於對tcp/ip協議的理解,遇到不理解的建議多google下相關的技術概念。

3. tcpmp知識拓展

再繼續深入tcpmp之前,先貼上一張tcp header格式圖,常看常新。

[https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true](https://github.com/music4kid/music4kid.github.io/blob/master/images/tcpheader.png?raw=true)"
width="1056">

3.1 TCP Flags(tcp header第十四個位元組)

我們再仔細看下上面提到的flags概念,flags位於tcp
header的第十四個位元組,包含8個比特位,也就是上圖的CWR到FIN。這8個比特位都有特定的功能用途,分別是:CWR,ECE,URG,ACK,PSH,RST,SYN,FIN。

CWR ,ECE 兩個flag是用來配合做congestion
control的,一般情況下和應用層關系不大。發送方的包ECE(ECN-Echo)為0的時候表示出現了congestion,接收方回的包里CWR(Congestion
Window Reced)為1表明收到congestion信息並做了處理。我們重點看其他六個flag。

URG
URG代表Urgent,表明包的優先順序高,需要優先傳送對方並處理。像我們平時使用terminal的時候經常ctrl+c來結束某個任務,這種命令產生的網路數據包就需要urgent。

ACK
也就是我們所熟悉的ack包,用來告訴對方上一個數據包已經成功收到。不過一般不會為了ack單獨發送一個包,都是在下一個要發送的packet里設置ack位,這屬於tcp的優化機制,參見delayed
ack。

PSH Push我們上面解釋過,接收方接收到P位的flag包需要馬上將包交給應用層處理,一般我們在http
request的最後一個包里都能看到P位被設置。

RST Reset位,表明packet的發送方馬上就要斷開當前連接了。在http請求結束的時候一般可以看到一個數據包設置了RST位。

SYN
SYN位在發送建立連接請求的時候會設置,我們所熟悉的tcp三次握手就是syn和ack位的配合:syn->syn+ack->ack。

FIN
Finish位設置了就表示發送方沒有更多的數據要發送了,之後就要單向關閉連接了,接收方一般會回一個ack包。接收方再同理發送一個FIN就可以雙向關閉連接了。

這8個flag首字母分別是:C E U A P R S F。初看難以記憶,我腦洞了下,把它們組合成 supr
cafe,當然少了super少了個e,我可以將就下。我們在使用tcpmp的時候會經常看到這幾個flag,[S],[P],[R],[F],[.]。其他幾個都好理解,[.]特殊點,是個佔位符,沒有其他flag被設置的時候就顯示這個佔位符,一般表示ack。

3.2 tcpmp 更多使用參數

這部分我們來看下tcpmp常用的一些命令參數。文章最開始部分的tcpmp命令是這樣的:sudo tcpmp -i rvi0 -AAl。
-i rvi0 -AAl都是屬於參數部分。常見的有這些:

-i, 要監聽的網卡名稱,-i rvi0監聽虛擬網卡。不設置的時候默認監聽所有網卡流量。

-A, 用ASCII碼展示所截取的流量,一般用於網頁或者app里http請求。-AA可以獲取更多的信息。

-X,用ASCII碼和hex來展示包的內容,和上面的-A比較像。-XX可以展示更多的信息(比如link layer的header)。

-n,不解析hostname,tcpmp會優先暫時主機的名字。-nn則不展示主機名和埠名(比如443埠會被展示成https)。

-s,截取的包位元組長度,默認情況下tcpmp會展示96位元組的長度,要獲取完整的長度可以用-s0或者-s1600。

-c,只截取指定數目的包,然後退出。

-v,展示更多的有用信息,還可以用-vv -vvv增加信息的展示量。

src,指明ip包的發送方地址。

dst,指明ip包的接收方地址。

port,指明tcp包發送方或者接收方的埠號。

and,or,not,操作法,字面意思。

上面幾個是我個人比較常用的,更多的參數可以參考這個詳細文檔。有興趣的可以分析下面幾個例子練習下:

tcpmp 『tcp[13] & 16!=0』

tcpmp src port 80 and tcp

tcpmp -vv src and not dst port 23

tcpmp -nnvvS src 192.0.1.100 and dst port 443

4. 用tcpmp分析http完整請求

說了這么多,我們再來實戰下,看一個完整的http請求流程。sudo tcpmp -i rvi0 -AAl src 60.28.215.123 or
dst 60.28.215.123

列出了6個前面的packet,10.29.44.240是我android的ip地址,60.28.215.123是知乎server的ip地址,紅色方框內是android發出的packet,白色方框內是server發出的packet。packet1是android三次握手的第一個syn包,packet2是server
ack+syn的包,packet3是android ack的包。這3個packet之後tcp的三次握手就完成了。

packet4是android發出的http
request。長度只有240個位元組,所以一個packet就發過去了,當然還設置了flags的P位,request需要馬上被應用層處理。包裡面出現了spdy,點贊。

packet5是server ack剛收到的包,長度位0,所以這僅僅是一個ack包。

packet6是server返回http的response了,1388個位元組。packet5和packet6都ack了seq為241的包,當然是為了增加ack的成功率。

中間還有好幾個packet就不仔細分析了,最後再看下請求完成的最後幾個包:

最後兩個packet比較簡單,android發送個FIN+ACK的包就斷開連接了,server直接發送了一個RST包後也斷開連接了。

Ⅱ 如何在 Android 手機上實現抓包

先給手機刷root權頃虛限,執行命令:
adb root
adb remount
ok後:把tcpmp放到c盤根目錄下:C:\
2. 執行命令:
adb push c:/tcpmp /data/local/雀輪燃tcpmp
(這個桐緩命令是把tcpmp拷到手機中去 )
3. adb shell chmod 6755 /data/local/tcpmp
是給tcp分配許可權
4. adb shell
/data/local/tcpmp -p -vv -s 0 -w /sdcard/capture.pcap
輸入 這個命令就等於啟動了抓包工具
5. 要停止抓包就Ctrl+C
6. sdcard的capture.pcap復制出來到電腦上用wireshark打開即可
以後每次抓包只要重復第4、5、6步即可。

Ⅲ 怎樣對Android設備進行網路抓包

前段時間自己的app訪問伺服器的url總是會出現間接性失敗的問題,於是和伺服器的同事開了個會,提出了他們伺服器存在的這個bug,我的同事自然雀拆說自己的伺服器沒問題,然後要我重現bug然後頃含棗提供抓包給他分老碼析。所以我自己去折騰了各種網路抓包的方法,下面介紹一種實際可行的對android設備抓包的方法。

解決方案:
利用tcpmp對android設備進行抓包,用wireshark進行抓包分析。在進行抓包之前,需要將設備進行root,推薦是用root工具king root,成功率較高。
http://blog.csdn.net/u013136708/article/details/50610955

Ⅳ 如何通過使用fiddler對Android系統設備抓包總結

1. 通過fiddler抓包真機
好處是安卓手機不用root,簡單設置代理,並可以在電腦端檢測抓包數據。只能抓獲wifi,不同抓包3g/2g運營商的數據
2. 通過tcpudmp工具抓包
可以檢測真機,也可以模擬器。可以wifi,也可以3g/2g
必須root,可以安裝在手機內,然後電腦端開啟檢測或者停止檢測,抓到的數據包*.cab再拷貝到電腦,通過用Wireshark分析數據包。

Ⅳ 如何在 Android 手機上實現抓包

Android系統手機端抓包方法有如下:一、抓包準備
1. Android手機需要先獲得root許可權。一種是否獲得root許可權的檢驗方法:安裝並打開終端模擬器(可通過安卓市場等渠道獲得)。在終端模擬器界面輸入su並回車,若報錯則說明未root,若命令提示符從$變#則為rooted。
2. 如果Android手機尚未root,可通過superoneclick或其它方法進行root處理(需要先安裝Microsoft .NET Framework)。
3. 需要先獲得 Android SDK,Android的開發環境高改肆。
4. 需要獲得tcpmp軟體。

二、抓包步驟
1. 將Android手機與電腦USB相連,打開windows命令提示符窗口。
2. 將tcpmp程序至android手戚轎機(該命令前面那個目錄文件為本地地址,後面那個目錄為目的手機端地址)。C:\android-sdk-windows\platform-tools>adb push c:/tcpmp /data/local/tcpmp
3. 修改tcpmp的許可權。C:\android-sdk-windows\platform-tools>adb shell #chmod 777 /data/local/tcpmp
4. 進入root許可權 C:\android-sdk-windows\platform-tools>adb shell,執行$ su ,在運行su指令後,手機終端桌面會出現相應提示信息以確認您對root操作的認可。
5. 運行tcpmp,輸入以下命令啟動抓包。/data/local/tcpmp -p -vv -s 0 -w /sdcard/capture.pcap。
6. 在手機端執行相應需要進行抓包分析的操作,執行完成後在命令提示符窗口執行Ctrl+C中斷抓包進程。
7. 將抓包結果復制至本地(前面殲扒那個目錄為手機端地址,後面那個目錄為本地地址),C:\android-sdk-windows\platform-tools>adb pull /sdcard/capture.pcap c:/
8. 使用Wireshark等工具查看抓包文件capture.pcap。

Ⅵ 如何對Android設備進行網路抓包

方法/步驟

啟動Fiddler,打開菜單欄中的 Tools > Fiddler Options,打開「Fiddler Options」對話框。

在Fiddler Options」對話框切換到「Connections」選項卡,然後勾選「Allow romote computers to connect」後面的復選框,然後點擊「OK」拿臘或按鈕。

在本機命令行輸入:ipconfig,找到本機的ip地址。

打開android設備的「設置」->「WLAN」,找到要連接的網路,在上面長按,然後選擇「修改網路局判」,彈出網路設置對消伍話框,然後勾選「顯示高級選項」。

在「代理」後面的輸入框選擇「手動」,在「代理伺服器主機名」後面的輸入框輸入電腦的ip地址,在「代理伺服器埠」後面的輸入框輸入8888,然後點擊「保存」按鈕。

然後啟動android設備中的瀏覽器,訪問網路的首頁,在fiddler中可以看到完成的請求和響應數據。

Ⅶ Android如何利用VpnService來抓包

通過這張圖可以看出在未使用VpnService的情況下,App會走系統網路來進行各種網路通信。而在使用VpnService的情況下,IP層網路通信傳輸的包將經由本地的虛擬通道交由VpnService來處理,這樣一來我們便可以捕獲這些數據從而達到抓包的目的。

至今還沒有完全理解這個API的意義。按照google的文檔來說就是:

看起來像是添加一個虛擬IP地址的意思,然而按照教程中的描述則為:

參數變成了子網掩碼,但是按照實際的使用來看更偏向於第一種。

添加路由來過濾發送特定IP地址的流量,如果不進行任何過濾則需要設置為0.0.0.0/0或::/0

添加DNS伺服器的地址,如果不添加的話將使用手機默認的DNS伺服器。

添加白名單,白名單中的app的流量將不會經過vpn虛擬通道而直接走系統網路。

設置是否為阻塞模式,默認為非阻塞。個人感覺很重要的API,github上的很多項目沒有設置為阻塞導致具體實現的時候用的都是線程輪詢的方式,這一樣一來大大提升了系統的開銷。設置為阻塞模式後將大大減少進程上下文的切換。

設置虛擬通道的最大傳輸位元組數,需要根據具體情況具體分析。在抓包的場景下最好盡可能得設置大一些。

簡單來說是否允許一些app在使用一些非主流的方式訪問網路的情況下不走虛擬通道。個人覺得最好允許。

VpnService啟動後創建Builder進行各種初始化,結束後調用establish()獲得本地虛擬通道的文件描述符(mFD)。通過輸入流讀取需要發送IP數據包後解析包的解析(網上有各種第三方的庫可供選擇)。首先判斷是版本是IPV4還是IPV6,之後根據不同的版本來判斷使用的是什麼協議。
實際抓包的時候可以看到很多協議種類,當然主要的還是UDP與TCP。

可以創建一個稀疏數組,key為源埠,value為Datagram通道,通過Datagram通道向外發送UDP數據,從而減少系統開銷。最終通過Datagram通道拿到UDP響應數據後寫入mFD的輸出流。

TCP的情況比較麻煩,涉及到三次握手以及四次分手,在github上看到個人感覺比較好的做法是,本地建立一個代理伺服器來模擬這個過程。這個還需要深入研究。

套接字在發送之前一定要調用protect來防止循環鏈接,否則發出去的包又回回到mFD的輸入流造成死循環。

另外mFD如果不關閉的話是沒辦法停止VpnService的。

Ⅷ Android 配置Fiddler抓包

將瀏覽器的代理設置成Fiddler能夠實現Fiddler抓取瀏覽器的請求。同理,Android手機配置Fiddler作為代理伺服器,從而讓Fiddler能夠截獲Android的流量來實現抓包。

可以通過ipconfig命令等查看,最簡單的就是將滑鼠移到Fiddler窗口右上角的online字樣上面,會自動提示當前電腦IP地址。

比如,我當前PC IP地址為172.20.224.63

打開Fiddler上Tools-->Options,選擇Connections選項卡,可以查看到代理埠地址。默認為8888。你可以自行配置成其他埠號。

還有,請勾選「Allow remote computers to connect」(這是允許Android手機通過代理進行網路訪問)。

手機連接和PC位於同一區域網的wifi,連接成功後,進入到高級選項中。(不同手機有不同的進入方法,早期手機是長按已經連接上的wifi,現在有些手機直接提供了進入配置的箭頭按鈕。)
將代理伺服器主機名修改為第一步獲取的IP地址,埠號為第一步獲取的埠號。然後保存。

以上配置OK,打開手機進行網路訪問吧,看看Fiddler上有沒有HTTP請求包。

實際測試,如果發現沒有數據包,你需要檢查Fiddler是否打開,是否允許遠程電腦訪問,以及埠號和IP地址是否配置正確,然後重啟試試看(重啟Fidder、手機重連Wifi,重新配置等)。

以上配置的僅僅是抓取HTTP請求,對於HTTPS請求,你還是看不到。下面介紹下,HTTPS抓包配置。

HTTPS也是需要通過Fiddler代理來抓取的,所以呢,前面的配置代理的過程不變。下面介紹其他涉及到證書安裝方面的。

打開Tools->Options,選擇HTTPS選項卡,按照下圖進行勾選。

PC上安裝好了根證書之後,還需要在手機上安裝根證書,才能保證Fiddller能夠正確解析出HTTPS包。(原理是,手機通過Fiddler做了代理後,HTTPS請求進行握手時候獲取的證書就是Fiddler自己生成的證書,這個證書在手機上默認不受信任,這樣會導致手機端認為服務端非法從而斷開HTTPS握手,導致請求失敗。所以,我們需要讓手機信任Fiddler的根證書。)

手機在配置好HTTP代理後,打開瀏覽器,輸入: http://ipv4.fiddler:8888/ 。實際上 ipv4.fiddler 會引導到Fiddler所在PC的IP地址上。所以,你輸入http://<pc ip>:<port>也是可以的。(題外話, ipv4.fiddler 這個域名不是外網通用域名,你知道為啥會正確解析不?猜想是Fiddler自己提供了本地DNS解析服務)

OK,以上是所有的配置。

配置成功後,觀察Fiddler,手機進行一些操作,看看HTTPS的請求能解析不。如果你遇到下面的異常:

很大可能是由於手機上沒有安裝Fiddler的根證書。當然,還有例外,如果手機Android系統為7.0以上,即便安裝了Fiddler的根證書,也會出現這個異常。原因請參考 https://www.jianshu.com/p/0711ca1121e9

Ⅸ 使用Charles對Android 進行HTTP抓包

 官方介紹:Charles讓開發者能夠直觀地瀏覽機器客戶端和互聯網之間的通信數據,包括客戶端發送的請求數據、服務端返回的響應數據以及HTTP頭部。

 除了官方介紹,對於孝握李Android開發來說,Charles還皮滾有一個非常實用的功能。巧遲Charles能將某個介面的服務端響應數據保存到本地電腦上,然後將請求映射到本地,下次再請求這個介面時,手機端收到的response就是已經保存在本地的數據。而我們可以隨意修改本地數據,也就是說,可以讓客戶端接收到任意我們想給的數據。

配置好網路代理才能讓手機端的請求被Charles捕獲到。

 配置好了之後,就能在Charles看到手機端與伺服器之間的數據交互了。在Request中能看到手機端發送的請求數據,在Response中能看到服務端返回給手機的數據。

也就是上面說的請求映射,使用方法:

 然後,下次手機再請求這個介面時,返回的就是本地Response里的數據了。這時候就可以愉快地修改本地Response數據,想要返回什麼數據就有什麼數據。

Ⅹ Android逆向之http/https網路抓包

用於android app的http/https網路抓包的主要有以下三個工具

由於這個知識點網上的資料比較多,我就不重復迅圓塌造車了,charles和burpsuite在linux下用,windows下推薦畝圓使用fiddler,功能比較強大,寫的比較好的文章:
fiddler Android下https抓包全腔迅攻略

另外的方法可見:
http://blog.dornea.nu/2015/02/20/android-remote-sniffing-using-tcpmp-nc-and-wireshark/

閱讀全文

與android網路數據抓包相關的資料

熱點內容
java修改ip 瀏覽:149
php不需要編譯嗎 瀏覽:134
特斯拉新車如何用app控制 瀏覽:185
文檔拖到文件夾就不見了 瀏覽:814
標致308壓縮比是多少 瀏覽:749
伺服器和備用伺服器地址 瀏覽:926
程序員加班跳槽 瀏覽:706
青年員工在工作中如何化解壓力 瀏覽:602
包子解壓神器怎麼玩才爽 瀏覽:733
聯想加密電腦怎麼做系統 瀏覽:881
解壓最近的壓力 瀏覽:709
如何知道王牌戰爭新出來的伺服器 瀏覽:591
程序員建的房子 瀏覽:419
navicatlinux破解版 瀏覽:454
找個輔警或者程序員 瀏覽:452
軍團td預言命令 瀏覽:114
營指揮員下達作戰命令 瀏覽:258
exe打開指定文件夾 瀏覽:265
pdf裡面怎麼去水印 瀏覽:845
appleid賬號加密碼 瀏覽:221