使用Fiddler抓取移动应用数据包

一.什么是fiddler?

Fiddler是一款常用的http协议的抓包工具,它的原理是在本机开启一个http的代理服务器,通过它会转发所有的http请求和响应,可以对手机的一些应用进行http抓包.

优点:免费、免费、免费

缺点:

1.仅支持windows系统

2.搜索特定url时耗时较长(charles可以按路径划分请求)

如果是osx系统请使用青花瓷(charles)

二.fiddler安装地址

电脑百度:一般默认第一个就是fiddler下载地址


使用Fiddler抓取移动应用数据包_第1张图片
fiddler下载地址

官网:https://www.telerik.com/fiddler

备注:1.选择对应电脑系统的版本

           2.选择你需要下载的版本

三.通过fiddler抓取手机APP应用的数据包

1.前置条件:手机的IP地址与电脑的IP地址需要在同一个网段可以满足(一般使用同一wifi即可)

2.下载安装fiddler并打开(fiddler默认设置先不更改)

3.fiddler一级工具栏--tools--fiddler options--connections--将端口号设置为8888--OK

4.勾选“allow remote computers to connect”(允许远程设备连接)


使用Fiddler抓取移动应用数据包_第2张图片
允许外部设备连接

5.fiddler抓取https请求

fiddler一级工具栏--tools--fiddler options--HTTPS-勾选“capture https connects”--OK

    下拉菜单:

    a.from remote clients only:仅抓取外部应用的数据包

    b.from broswers only:仅抓取电脑网页的数据包

    c.from all processes:抓取所有的数据包

    若仅抓移动端应用的包,建议选择a选项

    ignore server certificateerrors(unsafe):忽略服务器证书

   不选择此项,请求部分url会弹各种弹窗,建议勾选


使用Fiddler抓取移动应用数据包_第3张图片
抓取https包时fiddler的设置

备注:完成之后需要重新启动fiddler

6.手机端设置

确认电脑的ip地址:将鼠标放置于fiddler右上角“online”上方,查看弹窗,确认电脑ip地址


使用Fiddler抓取移动应用数据包_第4张图片
查看ip地址

(1):iPhone设备

设置--无线局域网--点击目前连接的wifi--上划到底--HTTP代理--配置代理--手动

服务器:电脑的ip地址

端口:8888(与步骤3设置的端口号一致)

存储(此处以ios11设置为例)

使用Fiddler抓取移动应用数据包_第5张图片
iPhone设备设置手机代理

(2):安卓设备

设置-wlan-进入网络详情页(部分设备长按进入/部分设备点击右侧按钮进入)-代理-手动

服务器:电脑的ip地址

端口:8888(与步骤3设置的端口号一致)

保存


使用Fiddler抓取移动应用数据包_第6张图片
安卓设备设置手机代理

(3)安装fiddler证书

建议使用系统自带的浏览器安装证书,iPhone:safari 安卓:系统自带浏览器

网址页输入:“IP地址”+“:”+“8888”  进入如下界面


使用Fiddler抓取移动应用数据包_第7张图片
手机安装fiddler证书

点击:FIddlerRoot certficate--保存并安装证书

备注:

iPhone:由于ios11加入了部分限制,有2处需要验证

a.设置--通用--描述文件--验证DO_NOT_TRUST_FiddlerRoot

b.设置--通用--关于本机--证书信任设置--信任DO_NOT_TRUST_FiddlerRoot

安卓:安卓7.0以上设备无法抓取https数据包

原因:Android N之后为了增强系统的安全性,不再信任用户导入的CA根证书

解决方法:

a.使用工具(ApkTool/ApkIDE)

b.将下载下来的apk文件使用工具软件反编译

c.打开反编译的文件夹,找到res/xml目录,查找network_security_config.xml文件

d.如果没有就自己新建一个,使用UTF-8无BOM的编码,内容为:


使用Fiddler抓取移动应用数据包_第8张图片
解决安卓7.0无法抓包的问题

7.判断代理是否设置成功

打开fiddler-打开任意一个应用-查看fiddler中是否有请求

三.客户端请求

抓包本质上是查看客户端与服务器之间交互的过程和结果

1.请求方式:常用的有get请求与post请求

两者之间的区别


使用Fiddler抓取移动应用数据包_第9张图片
get与post之间的区别

2.url组成

url组成:协议+域名+端口+虚拟目录+文件名+参数+锚

{协议}://:{端口号}/{路径}/{文件}?{参数}#{锚}

示例A   https://app.bilibili.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

常用协议:http、https (示例中为: https:)

域名:app.bilibili.com是域名,可使用ip地址作为域名

端口:跟在域名之后的是端口,域名与端口之间由“:”分开(非必须,省略则使用默认端口)(示例中省略)

虚拟目录:从域名后的第一个“/”开始到最后一个“/”为止(非必须)(示例中为:/x/v2/)

文件名:从域名后的最后一个“/”开始到“?”为止(非必须,省略则使用默认文件名)(示例中为:splash)

参数:从“?”开始到“#”为止之间的部分(可有多个参数,参数与参数之间用“&”拼接)(示例中为:?后所有内容)

锚:从“#”开始到最后,都是锚部分(非必须)(示例中无)

3.常用的协议:http/https


使用Fiddler抓取移动应用数据包_第10张图片
http与https的区别

也可参考文章:https://www.zhihu.com/question/19577317

四、fiddler界面

(1)Static:可以清晰的看到客户端请求发出的时间、请求耗时、请求资源的大小


使用Fiddler抓取移动应用数据包_第11张图片
static

(2)Inspector:常用来定位问题

inspectors tab下有很多查看request或者response的消息。 

raw tab可以查看完整的消息

headers tab只查看消息中的header

WebForms tab以直观的界面查看Body值和QueryString值

Cookies tab以直观的界面查看header中的cookie值

定位问题举例:

客户端有一个视频的封面没有展示,但是我们通过接口可以看到接口其实是有返回对应的图片(“cover”字段后有对应的图片)

问:这是谁的锅?

思路:

1.这个图片服务端有返回的,客户端没有展示出来,是不是客户端的问题?

2.我可以通过浏览器去查看这个图片,看下它到底可不可以正常打开?

3.这个图片的格式是不是客户端不支持啊


使用Fiddler抓取移动应用数据包_第12张图片
根据接口请求与返回判断定位问题

(3)AutoResponder:重定向

字面意思:重新设定方向                正常:a->b 改变:a->c

通俗理解:请求一个接口把服务端返回值改成你自己希望的返回值,通过配置对应的服务端返回文件来实现

目的:不通过修改数据库或其它方式,短时间内完成测试场景的覆盖

示例:

caseA:视频没有封面时,如何展示

思路:

1.确定是哪个接口

2.确定接口返回的数据,哪个字段对应封面

3.修改返回的数据

方式:

1.在fiddler请求列表中找到对应url--点击选中


使用Fiddler抓取移动应用数据包_第13张图片

2.切换AutoResponder tab--点击add Rule


使用Fiddler抓取移动应用数据包_第14张图片

3.在底部 Rule Editor中--点击"test..."--将url“?”后部分全部删除--将前方的“exact:”改为“regex:”-save changes


使用Fiddler抓取移动应用数据包_第15张图片

原因:由于每次请求时的参数都有变更 regex:正则匹配 exact:完全匹配(可能导致下次本次修改不生效)

本步目的:确定你想要修改哪个请求的返回

4.先查看此请求正常的返回值(切换insepectors tab-查看底部response)


使用Fiddler抓取移动应用数据包_第16张图片

5.复制返回文件到一个新的文件中

实现步骤:

a.查看底部response-切换textviewtab

b.点击数据区域-ctrl+a全选并复制

c.新建一个文件--将文件复制到新文件中


使用Fiddler抓取移动应用数据包_第17张图片

备注:新文件的格式要与接口返回数据格式一致(常见有xml、json等)

d.找到文件对应字段,修改字段值(此处将cover的值置为空)


使用Fiddler抓取移动应用数据包_第18张图片

6.点击 Rule Editor第2个下拉菜单--下拉--点击find a file--选择新文件的保存路径


使用Fiddler抓取移动应用数据包_第19张图片

7.点击save & ensure rules 下次再次请求此接口就会生效


使用Fiddler抓取移动应用数据包_第20张图片
完成伪造本地数据

(4)Filters

设置会话过滤

以移动端测试为例,fiddler会监听手机发出的所有http请求,列表中请求过多,不容易查找所需的请求,此时可以设置过滤

首先要确定:我只需要查看的APP发出的哪些http请求

举例:

一个APP发出的请求有app.baidu.com api.baidu.com message.baidu.com.....

此时可以使用 通配符+其他模糊匹配域名 如:此处可使用 *.baidu.com

其他固定的域名就直接写上,注意:域名与域名之间用“;”分隔

在fiddler上的操作

1.切换Filters tab-在Hosts区域操作


使用Fiddler抓取移动应用数据包_第21张图片
何处设置过滤

2.第一个下拉菜单选择“No Zone Filter”--第二个下拉菜单选择“Show only the following Hosts”

第二个下拉菜单中的内容:

No Host filter:不设置域名过滤

Hide the following hosts:隐藏下方域名

show only the following hosts:仅展示下方的域名

flag the following hosts:标记下方域名(fiddler4是黑色加粗显示域名)

3.勾选左上角“use filters”(判断过滤是否生效(filters tab显示绿色对勾))


使用Fiddler抓取移动应用数据包_第22张图片
过滤生效

(5)fiddler工具栏


使用Fiddler抓取移动应用数据包_第23张图片
工具栏

(6)设置断点修改request

修改请求参数

方法1:打开fiddler 点击rules-> automatic breakpoint  ->before requests(不长使用,无针对性)

备注:此操作之后,后续所有的请求均会被中断

取消断点:打开fiddler点击rules-> automatic breakpoint  ->disabled


使用Fiddler抓取移动应用数据包_第24张图片
修改请求方法1

方法2:在(5)中命令行工具栏输入 bpu+指定url  然后输入回车

仅可拦截指定url请求

取消断点:仅输入bpu 然后输入回车

(7)显示ip地址

默认fiddler是不显示此列

应用场景:测试过程中经常会切换环境(测试环境、UAT、预发....),可以根据server ip确认环境是否生效

方法:

1.Ctrl+r打开fiddler scripteditor

2.Crtl+f搜索输入static function Main()

3.在如下位置加入一段代码:

FiddlerObject.UI.lvSessions.AddBoundColumn("ServerIP", 120, "X-HostIP");

4.保存

5.重新打开fiddler 可看到severip行


使用Fiddler抓取移动应用数据包_第25张图片
显示ip地址

(8)模拟弱网

一、fiddler自带(不是特别好用,贵在精确)

备注:在原有响应时间的基础上增加时长

方法:

1.Ctrl+r打开fiddler scripteditor

2.Crtl+f搜索输入simulate 找到如下代码:


使用Fiddler抓取移动应用数据包_第26张图片
找到对应位置


使用Fiddler抓取移动应用数据包_第27张图片
修改时长(单位毫秒)

二、使用iPhone自身的开发者选项

如何出现开发者选项?(以xcode9为例)

1.手机设备连接macxcode

2.Xcode -> Windows->Device and Simulators

3.选择当前设备->右键弹出选择菜单->选择Show Provisioning Profiles

4.拔掉数据线,打开设置可以看到“开发者”选项

模拟网络

1.开发者->NETWORKING->Network Link Conditioner

2.profiles常用列表项说明

100%Loss                全丢包

3G                             3G网络

DSL                           电话线上网

Edge                          2G网络

High Latency              DNS高延迟

Very Bad Network      网络状况不稳定

Wifi                              Wifi网络

3.选择对应的网络状态-Enable开关打开(绿色)

4.此时手机的网络速度就被改变了

备注:

个人偏爱:Edge/Very Bad Network 当弱网使用

                   3G:网络相对正常

                   wifi:相对较好的网络环境(跟wifi本身相关)

不模拟网络环境时,一定要记得把Enable开关关闭!!!否则忘了会很尴尬


使用Fiddler抓取移动应用数据包_第28张图片

你可能感兴趣的:(使用Fiddler抓取移动应用数据包)