一.什么是fiddler扁藕?
Fiddler是一款常用的http協(xié)議的抓包工具,它的原理是在本機(jī)開啟一個(gè)http的代理服務(wù)器荤崇,通過它會(huì)轉(zhuǎn)發(fā)所有的http請(qǐng)求和響應(yīng)典鸡,可以對(duì)手機(jī)的一些應(yīng)用進(jìn)行http抓包.
優(yōu)點(diǎn):免費(fèi)、免費(fèi)蛛枚、免費(fèi)
缺點(diǎn):
1.僅支持windows系統(tǒng)
2.搜索特定url時(shí)耗時(shí)較長(zhǎng)(charles可以按路徑劃分請(qǐng)求)
如果是osx系統(tǒng)請(qǐng)使用青花瓷(charles)
二.fiddler安裝地址
電腦百度:一般默認(rèn)第一個(gè)就是fiddler下載地址
官網(wǎng):https://www.telerik.com/fiddler
備注:1.選擇對(duì)應(yīng)電腦系統(tǒng)的版本
?????????? 2.選擇你需要下載的版本
三.通過fiddler抓取手機(jī)APP應(yīng)用的數(shù)據(jù)包
1.前置條件:手機(jī)的IP地址與電腦的IP地址需要在同一個(gè)網(wǎng)段可以滿足(一般使用同一wifi即可)
2.下載安裝fiddler并打開(fiddler默認(rèn)設(shè)置先不更改)
3.fiddler一級(jí)工具欄--tools--fiddler options--connections--將端口號(hào)設(shè)置為8888--OK
4.勾選“allow remote computers to connect”(允許遠(yuǎn)程設(shè)備連接)
5.fiddler抓取https請(qǐng)求
fiddler一級(jí)工具欄--tools--fiddler options--HTTPS-勾選“capture https connects”--OK
??? 下拉菜單:
??? a.from remote clients only:僅抓取外部應(yīng)用的數(shù)據(jù)包
??? b.from broswers only:僅抓取電腦網(wǎng)頁的數(shù)據(jù)包
? ? c.from all processes:抓取所有的數(shù)據(jù)包
? ? 若僅抓移動(dòng)端應(yīng)用的包谅海,建議選擇a選項(xiàng)
??? ignore server certificateerrors(unsafe):忽略服務(wù)器證書
?? 不選擇此項(xiàng),請(qǐng)求部分url會(huì)彈各種彈窗蹦浦,建議勾選
備注:完成之后需要重新啟動(dòng)fiddler
6.手機(jī)端設(shè)置
確認(rèn)電腦的ip地址:將鼠標(biāo)放置于fiddler右上角“online”上方扭吁,查看彈窗,確認(rèn)電腦ip地址
(1):iPhone設(shè)備
設(shè)置--無線局域網(wǎng)--點(diǎn)擊目前連接的wifi--上劃到底--HTTP代理--配置代理--手動(dòng)
服務(wù)器:電腦的ip地址
端口:8888(與步驟3設(shè)置的端口號(hào)一致)
存儲(chǔ)(此處以ios11設(shè)置為例)
(2):安卓設(shè)備
設(shè)置-wlan-進(jìn)入網(wǎng)絡(luò)詳情頁(部分設(shè)備長(zhǎng)按進(jìn)入/部分設(shè)備點(diǎn)擊右側(cè)按鈕進(jìn)入)-代理-手動(dòng)
服務(wù)器:電腦的ip地址
端口:8888(與步驟3設(shè)置的端口號(hào)一致)
保存
(3)安裝fiddler證書
建議使用系統(tǒng)自帶的瀏覽器安裝證書盲镶,iPhone:safari 安卓:系統(tǒng)自帶瀏覽器
網(wǎng)址頁輸入:“IP地址”+“:”+“8888”? 進(jìn)入如下界面
點(diǎn)擊:FIddlerRoot certficate--保存并安裝證書
備注:
iPhone:由于ios11加入了部分限制侥袜,有2處需要驗(yàn)證
a.設(shè)置--通用--描述文件--驗(yàn)證DO_NOT_TRUST_FiddlerRoot
b.設(shè)置--通用--關(guān)于本機(jī)--證書信任設(shè)置--信任DO_NOT_TRUST_FiddlerRoot
安卓:安卓7.0以上設(shè)備無法抓取https數(shù)據(jù)包
原因:Android N之后為了增強(qiáng)系統(tǒng)的安全性,不再信任用戶導(dǎo)入的CA根證書
解決方法:
a.使用工具(ApkTool/ApkIDE)
b.將下載下來的apk文件使用工具軟件反編譯
c.打開反編譯的文件夾徒河,找到res/xml目錄系馆,查找network_security_config.xml文件
d.如果沒有就自己新建一個(gè),使用UTF-8無BOM的編碼顽照,內(nèi)容為:
7.判斷代理是否設(shè)置成功
打開fiddler-打開任意一個(gè)應(yīng)用-查看fiddler中是否有請(qǐng)求
三.客戶端請(qǐng)求
抓包本質(zhì)上是查看客戶端與服務(wù)器之間交互的過程和結(jié)果
1.請(qǐng)求方式:常用的有g(shù)et請(qǐng)求與post請(qǐng)求
兩者之間的區(qū)別
2.url組成
url組成:協(xié)議+域名+端口+虛擬目錄+文件名+參數(shù)+錨
{協(xié)議}://:{端口號(hào)}/{路徑}/{文件}?{參數(shù)}#{錨}
示例A ? https://app.baidu.com/x/v2/splash?access_key=5bb8b7647b960b2506d1c55f40e6b1b5&actionKey=appkey&appkey=27eb53fc9058f8c3&build=6633&channel=appstore&device=phone&height=2208&mobi_app=iphone&platform=ios&sign=380eaeb889dbf4f1e1a9c1d59a4854f0&ts=1523966281&ver=41439258780710287502018250&width=1242
常用協(xié)議:http由蘑、https (示例中為: https:)
域名:app.bilibili.com是域名,可使用ip地址作為域名
端口:跟在域名之后的是端口代兵,域名與端口之間由“:”分開(非必須尼酿,省略則使用默認(rèn)端口)(示例中省略)
虛擬目錄:從域名后的第一個(gè)“/”開始到最后一個(gè)“/”為止(非必須)(示例中為:/x/v2/)
文件名:從域名后的最后一個(gè)“/”開始到“?”為止(非必須植影,省略則使用默認(rèn)文件名)(示例中為:splash)
參數(shù):從“裳擎?”開始到“#”為止之間的部分(可有多個(gè)參數(shù),參數(shù)與參數(shù)之間用“&”拼接)(示例中為:思币?后所有內(nèi)容)
錨:從“#”開始到最后鹿响,都是錨部分(非必須)(示例中無)
3.常用的協(xié)議:http/https
也可參考文章:https://www.zhihu.com/question/19577317
四羡微、fiddler界面
(1)Static:可以清晰的看到客戶端請(qǐng)求發(fā)出的時(shí)間、請(qǐng)求耗時(shí)惶我、請(qǐng)求資源的大小
(2)Inspector:常用來定位問題
inspectors tab下有很多查看request或者response的消息妈倔。?
raw?tab可以查看完整的消息
headers tab只查看消息中的header
WebForms tab以直觀的界面查看Body值和QueryString值
Cookies tab以直觀的界面查看header中的cookie值
定位問題舉例:
客戶端有一個(gè)視頻的封面沒有展示,但是我們通過接口可以看到接口其實(shí)是有返回對(duì)應(yīng)的圖片(“cover”字段后有對(duì)應(yīng)的圖片)
問:這是誰的鍋绸贡?
思路:
1.這個(gè)圖片服務(wù)端有返回的盯蝴,客戶端沒有展示出來,是不是客戶端的問題听怕?
2.我可以通過瀏覽器去查看這個(gè)圖片捧挺,看下它到底可不可以正常打開?
3.這個(gè)圖片的格式是不是客戶端不支持啊
(3)AutoResponder:重定向
字面意思:重新設(shè)定方向??????????????? 正常:a->b 改變:a->c
通俗理解:請(qǐng)求一個(gè)接口把服務(wù)端返回值改成你自己希望的返回值尿瞭,通過配置對(duì)應(yīng)的服務(wù)端返回文件來實(shí)現(xiàn)
目的:不通過修改數(shù)據(jù)庫或其它方式闽烙,短時(shí)間內(nèi)完成測(cè)試場(chǎng)景的覆蓋
示例:
caseA:視頻沒有封面時(shí),如何展示
思路:
1.確定是哪個(gè)接口
2.確定接口返回的數(shù)據(jù)筷厘,哪個(gè)字段對(duì)應(yīng)封面
3.修改返回的數(shù)據(jù)
方式:
1.在fiddler請(qǐng)求列表中找到對(duì)應(yīng)url--點(diǎn)擊選中
2.切換AutoResponder?tab--點(diǎn)擊add Rule
3.在底部 Rule Editor中--點(diǎn)擊"test..."--將url“鸣峭?”后部分全部刪除--將前方的“exact:”改為“regex:”-save changes
原因:由于每次請(qǐng)求時(shí)的參數(shù)都有變更 regex:正則匹配 exact:完全匹配(可能導(dǎo)致下次本次修改不生效)
本步目的:確定你想要修改哪個(gè)請(qǐng)求的返回
4.先查看此請(qǐng)求正常的返回值(切換insepectors tab-查看底部response)
5.復(fù)制返回文件到一個(gè)新的文件中
實(shí)現(xiàn)步驟:
a.查看底部response-切換textviewtab
b.點(diǎn)擊數(shù)據(jù)區(qū)域-ctrl+a全選并復(fù)制
c.新建一個(gè)文件--將文件復(fù)制到新文件中
備注:新文件的格式要與接口返回?cái)?shù)據(jù)格式一致(常見有xml、json等)
d.找到文件對(duì)應(yīng)字段酥艳,修改字段值(此處將cover的值置為空)
6.點(diǎn)擊 Rule Editor第2個(gè)下拉菜單--下拉--點(diǎn)擊find a file--選擇新文件的保存路徑
7.點(diǎn)擊save & ensure rules 下次再次請(qǐng)求此接口就會(huì)生效
(4)Filters
設(shè)置會(huì)話過濾
以移動(dòng)端測(cè)試為例摊溶,fiddler會(huì)監(jiān)聽手機(jī)發(fā)出的所有http請(qǐng)求,列表中請(qǐng)求過多充石,不容易查找所需的請(qǐng)求莫换,此時(shí)可以設(shè)置過濾
首先要確定:我只需要查看的APP發(fā)出的哪些http請(qǐng)求
舉例:
一個(gè)APP發(fā)出的請(qǐng)求有app.baidu.com api.baidu.com message.baidu.com.....
此時(shí)可以使用 通配符+其他模糊匹配域名 如:此處可使用 *.baidu.com
其他固定的域名就直接寫上,注意:域名與域名之間用“骤铃;”分隔
在fiddler上的操作
1.切換Filters tab-在Hosts區(qū)域操作
2.第一個(gè)下拉菜單選擇“No Zone Filter”--第二個(gè)下拉菜單選擇“Show only the following Hosts”
第二個(gè)下拉菜單中的內(nèi)容:
No Host filter:不設(shè)置域名過濾
Hide the following hosts:隱藏下方域名
show only the following hosts:僅展示下方的域名
flag the following hosts:標(biāo)記下方域名(fiddler4是黑色加粗顯示域名)
3.勾選左上角“use filters”(判斷過濾是否生效(filters tab顯示綠色對(duì)勾))
(5)fiddler工具欄
(6)設(shè)置斷點(diǎn)修改request
修改請(qǐng)求參數(shù)
方法1:打開fiddler 點(diǎn)擊rules-> automatic breakpoint? ->before requests(不長(zhǎng)使用拉岁,無針對(duì)性)
備注:此操作之后,后續(xù)所有的請(qǐng)求均會(huì)被中斷
取消斷點(diǎn):打開fiddler點(diǎn)擊rules-> automatic breakpoint? ->disabled
方法2:在(5)中命令行工具欄輸入 bpu+指定url? 然后輸入回車
僅可攔截指定url請(qǐng)求
取消斷點(diǎn):僅輸入bpu 然后輸入回車
(7)顯示ip地址
默認(rèn)fiddler是不顯示此列
應(yīng)用場(chǎng)景:測(cè)試過程中經(jīng)常會(huì)切換環(huán)境(測(cè)試環(huán)境惰爬、UAT喊暖、預(yù)發(fā)....),可以根據(jù)server ip確認(rèn)環(huán)境是否生效
方法:
1.Ctrl+r打開fiddler scripteditor
2.Crtl+f搜索輸入static function Main()
3.在如下位置加入一段代碼:
FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");
4.保存
5.重新打開fiddler 可看到severip行
(8)模擬弱網(wǎng)
一撕瞧、fiddler自帶(不是特別好用陵叽,貴在精確)
備注:在原有響應(yīng)時(shí)間的基礎(chǔ)上增加時(shí)長(zhǎng)
方法:
1.Ctrl+r打開fiddler scripteditor
2.Crtl+f搜索輸入simulate 找到如下代碼:
二、使用iPhone自身的開發(fā)者選項(xiàng)
如何出現(xiàn)開發(fā)者選項(xiàng)?(以xcode9為例)
1.手機(jī)設(shè)備連接macxcode
2.Xcode -> Windows->Device and Simulators
3.選擇當(dāng)前設(shè)備->右鍵彈出選擇菜單->選擇Show Provisioning Profiles
4.拔掉數(shù)據(jù)線丛版,打開設(shè)置可以看到“開發(fā)者”選項(xiàng)
模擬網(wǎng)絡(luò)
1.開發(fā)者->NETWORKING->Network Link Conditioner
2.profiles常用列表項(xiàng)說明
100%Loss?????? ? ? ? ?? 全丟包
3G?????????????????? ? ? ? ? ? 3G網(wǎng)絡(luò)
DSL?????????????????????????? 電話線上網(wǎng)
Edge????????????????????????? 2G網(wǎng)絡(luò)
High Latency??????????? ? DNS高延遲
Very Bad Network????? 網(wǎng)絡(luò)狀況不穩(wěn)定
Wifi????????????????????????????? Wifi網(wǎng)絡(luò)
3.選擇對(duì)應(yīng)的網(wǎng)絡(luò)狀態(tài)-Enable開關(guān)打開(綠色)
4.此時(shí)手機(jī)的網(wǎng)絡(luò)速度就被改變了
備注:
個(gè)人偏愛:Edge/Very Bad Network 當(dāng)弱網(wǎng)使用
?????????????????? 3G:網(wǎng)絡(luò)相對(duì)正常
?????????????????? wifi:相對(duì)較好的網(wǎng)絡(luò)環(huán)境(跟wifi本身相關(guān))
不模擬網(wǎng)絡(luò)環(huán)境時(shí)巩掺,一定要記得把Enable開關(guān)關(guān)閉!R称琛胖替!否則忘了會(huì)很尷尬