新聞中心
如何用Fiddler對(duì)Android應(yīng)用進(jìn)行抓包
用Fiddler對(duì)Android應(yīng)用進(jìn)行抓包的方法:
讓客戶滿意是我們工作的目標(biāo),不斷超越客戶的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶,將通過(guò)不懈努力成為客戶在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:域名與空間、虛擬主機(jī)、營(yíng)銷軟件、網(wǎng)站建設(shè)、羅江網(wǎng)站維護(hù)、網(wǎng)站推廣。
1、啟動(dòng)Fiddler,打開(kāi)菜單欄中的 Tools Fiddler Options,打開(kāi)“Fiddler Options”對(duì)話框。
2、在Fiddler Options”對(duì)話框切換到“Connections”選項(xiàng)卡,然后勾選“Allow romote computers to connect”后面的復(fù)選框,然后點(diǎn)擊“OK”按鈕,記住代理端口號(hào)(注意,此界面中的端口號(hào)可修改為你喜歡的,建議保持默認(rèn))。
3、設(shè)置完成后,重啟Fiddler
4、在本機(jī)命令行輸入:ipconfig,找到本機(jī)的ip地址。
5、打開(kāi)android設(shè)備的“設(shè)置”-“WLAN”,找到你要連接的網(wǎng)絡(luò),在上面長(zhǎng)按,然后選擇“修改網(wǎng)絡(luò)”,彈出網(wǎng)絡(luò)設(shè)置對(duì)話框,然后勾選“顯示高級(jí)選項(xiàng)”。
6、在“代理”后面的輸入框選擇“手動(dòng)”,在“代理服務(wù)器主機(jī)名”后面的輸入框輸入電腦的ip地址,在“代理服務(wù)器端口”后面的輸入框輸入8888,然后點(diǎn)擊“保存”按鈕。
7、然后啟動(dòng)android設(shè)備中的瀏覽器,訪問(wèn)百度的首頁(yè),在fiddler中可以看到完成的請(qǐng)求和響應(yīng)數(shù)據(jù)。
Android 配置Fiddler抓包
將瀏覽器的代理設(shè)置成Fiddler能夠?qū)崿F(xiàn)Fiddler抓取瀏覽器的請(qǐng)求。同理,Android手機(jī)配置Fiddler作為代理服務(wù)器,從而讓Fiddler能夠截獲Android的流量來(lái)實(shí)現(xiàn)抓包。
可以通過(guò)ipconfig命令等查看,最簡(jiǎn)單的就是將鼠標(biāo)移到Fiddler窗口右上角的online字樣上面,會(huì)自動(dòng)提示當(dāng)前電腦IP地址。
比如,我當(dāng)前PC IP地址為172.20.224.63
打開(kāi)Fiddler上Tools--Options,選擇Connections選項(xiàng)卡,可以查看到代理端口地址。默認(rèn)為8888。你可以自行配置成其他端口號(hào)。
還有,請(qǐng)勾選“Allow remote computers to connect”(這是允許Android手機(jī)通過(guò)代理進(jìn)行網(wǎng)絡(luò)訪問(wèn))。
手機(jī)連接和PC位于同一局域網(wǎng)的wifi,連接成功后,進(jìn)入到高級(jí)選項(xiàng)中。(不同手機(jī)有不同的進(jìn)入方法,早期手機(jī)是長(zhǎng)按已經(jīng)連接上的wifi,現(xiàn)在有些手機(jī)直接提供了進(jìn)入配置的箭頭按鈕。)
將代理服務(wù)器主機(jī)名修改為第一步獲取的IP地址,端口號(hào)為第一步獲取的端口號(hào)。然后保存。
以上配置OK,打開(kāi)手機(jī)進(jìn)行網(wǎng)絡(luò)訪問(wèn)吧,看看Fiddler上有沒(méi)有HTTP請(qǐng)求包。
實(shí)際測(cè)試,如果發(fā)現(xiàn)沒(méi)有數(shù)據(jù)包,你需要檢查Fiddler是否打開(kāi),是否允許遠(yuǎn)程電腦訪問(wèn),以及端口號(hào)和IP地址是否配置正確,然后重啟試試看(重啟Fidder、手機(jī)重連Wifi,重新配置等)。
以上配置的僅僅是抓取HTTP請(qǐng)求,對(duì)于HTTPS請(qǐng)求,你還是看不到。下面介紹下,HTTPS抓包配置。
HTTPS也是需要通過(guò)Fiddler代理來(lái)抓取的,所以呢,前面的配置代理的過(guò)程不變。下面介紹其他涉及到證書安裝方面的。
打開(kāi)Tools-Options,選擇HTTPS選項(xiàng)卡,按照下圖進(jìn)行勾選。
PC上安裝好了根證書之后,還需要在手機(jī)上安裝根證書,才能保證Fiddller能夠正確解析出HTTPS包。(原理是,手機(jī)通過(guò)Fiddler做了代理后,HTTPS請(qǐng)求進(jìn)行握手時(shí)候獲取的證書就是Fiddler自己生成的證書,這個(gè)證書在手機(jī)上默認(rèn)不受信任,這樣會(huì)導(dǎo)致手機(jī)端認(rèn)為服務(wù)端非法從而斷開(kāi)HTTPS握手,導(dǎo)致請(qǐng)求失敗。所以,我們需要讓手機(jī)信任Fiddler的根證書。)
手機(jī)在配置好HTTP代理后,打開(kāi)瀏覽器,輸入: 。實(shí)際上 ipv4.fiddler 會(huì)引導(dǎo)到Fiddler所在PC的IP地址上。所以,你輸入;pc ip:port也是可以的。(題外話, ipv4.fiddler 這個(gè)域名不是外網(wǎng)通用域名,你知道為啥會(huì)正確解析不?猜想是Fiddler自己提供了本地DNS解析服務(wù))
OK,以上是所有的配置。
配置成功后,觀察Fiddler,手機(jī)進(jìn)行一些操作,看看HTTPS的請(qǐng)求能解析不。如果你遇到下面的異常:
很大可能是由于手機(jī)上沒(méi)有安裝Fiddler的根證書。當(dāng)然,還有例外,如果手機(jī)Android系統(tǒng)為7.0以上,即便安裝了Fiddler的根證書,也會(huì)出現(xiàn)這個(gè)異常。原因請(qǐng)參考
如何在 Android 手機(jī)上實(shí)現(xiàn)抓包
你好,
先給手機(jī)刷root權(quán)限,執(zhí)行命令:
adb root
adb remount
ok后:把tcpdump放到c盤根目錄下:C:\
2. 執(zhí)行命令:
adb push c:/tcpdump /data/local/tcpdump
(這個(gè)命令是把tcpdump拷到手機(jī)中去 )
3. adb shell chmod 6755 /data/local/tcpdump
是給tcp分配權(quán)限
4. adb shell
/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap
輸入 這個(gè)命令就等于啟動(dòng)了抓包工具
5. 要停止抓包就Ctrl+C
6. sdcard的capture.pcap復(fù)制出來(lái)到電腦上用wireshark打開(kāi)即可
以后每次抓包只要重復(fù)第4、5、6步就ok了。
Android如何利用VpnService來(lái)抓包
通過(guò)這張圖可以看出在未使用VpnService的情況下,App會(huì)走系統(tǒng)網(wǎng)絡(luò)來(lái)進(jìn)行各種網(wǎng)絡(luò)通信。而在使用VpnService的情況下,IP層網(wǎng)絡(luò)通信傳輸?shù)陌鼘⒔?jīng)由本地的虛擬通道交由VpnService來(lái)處理,這樣一來(lái)我們便可以捕獲這些數(shù)據(jù)從而達(dá)到抓包的目的。
至今還沒(méi)有完全理解這個(gè)API的意義。按照google的文檔來(lái)說(shuō)就是:
看起來(lái)像是添加一個(gè)虛擬IP地址的意思,然而按照教程中的描述則為:
參數(shù)變成了子網(wǎng)掩碼,但是按照實(shí)際的使用來(lái)看更偏向于第一種。
添加路由來(lái)過(guò)濾發(fā)送特定IP地址的流量,如果不進(jìn)行任何過(guò)濾則需要設(shè)置為0.0.0.0/0或::/0
添加DNS服務(wù)器的地址,如果不添加的話將使用手機(jī)默認(rèn)的DNS服務(wù)器。
添加白名單,白名單中的app的流量將不會(huì)經(jīng)過(guò)vpn虛擬通道而直接走系統(tǒng)網(wǎng)絡(luò)。
設(shè)置是否為阻塞模式,默認(rèn)為非阻塞。個(gè)人感覺(jué)很重要的API,github上的很多項(xiàng)目沒(méi)有設(shè)置為阻塞導(dǎo)致具體實(shí)現(xiàn)的時(shí)候用的都是線程輪詢的方式,這一樣一來(lái)大大提升了系統(tǒng)的開(kāi)銷。設(shè)置為阻塞模式后將大大減少進(jìn)程上下文的切換。
設(shè)置虛擬通道的最大傳輸字節(jié)數(shù),需要根據(jù)具體情況具體分析。在抓包的場(chǎng)景下最好盡可能得設(shè)置大一些。
簡(jiǎn)單來(lái)說(shuō)是否允許一些app在使用一些非主流的方式訪問(wèn)網(wǎng)絡(luò)的情況下不走虛擬通道。個(gè)人覺(jué)得最好允許。
VpnService啟動(dòng)后創(chuàng)建Builder進(jìn)行各種初始化,結(jié)束后調(diào)用establish()獲得本地虛擬通道的文件描述符(mFD)。通過(guò)輸入流讀取需要發(fā)送IP數(shù)據(jù)包后解析包的解析(網(wǎng)上有各種第三方的庫(kù)可供選擇)。首先判斷是版本是IPV4還是IPV6,之后根據(jù)不同的版本來(lái)判斷使用的是什么協(xié)議。
實(shí)際抓包的時(shí)候可以看到很多協(xié)議種類,當(dāng)然主要的還是UDP與TCP。
可以創(chuàng)建一個(gè)稀疏數(shù)組,key為源端口,value為Datagram通道,通過(guò)Datagram通道向外發(fā)送UDP數(shù)據(jù),從而減少系統(tǒng)開(kāi)銷。最終通過(guò)Datagram通道拿到UDP響應(yīng)數(shù)據(jù)后寫入mFD的輸出流。
TCP的情況比較麻煩,涉及到三次握手以及四次分手,在github上看到個(gè)人感覺(jué)比較好的做法是,本地建立一個(gè)代理服務(wù)器來(lái)模擬這個(gè)過(guò)程。這個(gè)還需要深入研究。
套接字在發(fā)送之前一定要調(diào)用protect來(lái)防止循環(huán)鏈接,否則發(fā)出去的包又回回到mFD的輸入流造成死循環(huán)。
另外mFD如果不關(guān)閉的話是沒(méi)辦法停止VpnService的。
[img]分享文章:android抓包,Android抓包源碼
本文地址:http://fisionsoft.com.cn/article/dsohoih.html