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

一.什么是fiddler?

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

优点:免费、免费、免费

缺点:

1.仅支持windows系统

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

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

二.fiddler安装地址

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


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”(允许远程设备连接)


允许外部设备连接

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会弹各种弹窗,建议勾选


抓取https包时fiddler的设置

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

6.手机端设置

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


查看ip地址

(1):iPhone设备

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

服务器:电脑的ip地址

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

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

iPhone设备设置手机代理

(2):安卓设备

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

服务器:电脑的ip地址

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

保存


安卓设备设置手机代理

(3)安装fiddler证书

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

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


手机安装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的编码,内容为:


解决安卓7.0无法抓包的问题

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

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

三.客户端请求

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

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

两者之间的区别


get与post之间的区别

2.url组成

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

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

示例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

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

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

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

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

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

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

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

3.常用的协议:http/https


http与https的区别

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

四、fiddler界面

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


static

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

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

raw tab可以查看完整的消息

headers tab只查看消息中的header

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

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

定位问题举例:

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

问:这是谁的锅?

思路:

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

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

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


根据接口请求与返回判断定位问题

(3)AutoResponder:重定向

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

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

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

示例:

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

思路:

1.确定是哪个接口

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

3.修改返回的数据

方式:

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


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


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


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

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

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


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

实现步骤:

a.查看底部response-切换textviewtab

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

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


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

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


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


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


完成伪造本地数据

(4)Filters

设置会话过滤

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

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

举例:

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

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

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

在fiddler上的操作

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


何处设置过滤

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显示绿色对勾))


过滤生效

(5)fiddler工具栏


工具栏

(6)设置断点修改request

修改请求参数

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

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

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


修改请求方法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行


显示ip地址

(8)模拟弱网

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

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

方法:

1.Ctrl+r打开fiddler scripteditor

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


找到对应位置


修改时长(单位毫秒)

二、使用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开关关闭!!!否则忘了会很尴尬


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 152,007评论 1 332
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 64,661评论 1 273
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 101,998评论 0 226
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 42,658评论 0 193
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 50,825评论 3 272
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 39,704评论 1 192
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,148评论 2 293
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 29,870评论 0 182
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 33,490评论 0 230
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 29,956评论 2 233
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,365评论 1 243
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 27,817评论 2 236
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,319评论 3 221
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 25,840评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,466评论 0 181
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 34,585评论 2 249
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 34,635评论 2 249

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,050评论 18 139
  • 前言fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不安全,这时...
    胖子爱猪蹄阅读 11,926评论 4 22
  • 简介 Fiddler(中文名称:小提琴)是一个HTTP的调试代理,以代理服务器的方式,监听系统的Http网络数据流...
    JxMY阅读 1,457评论 0 11
  • Fiddler_官方网站Fiddler_官方文档Fiddler_官方视频Fiddler_官方插件1、Filddle...
    52Alice阅读 7,551评论 0 10
  • 有人说,喜欢一个人,也许只需要一秒钟, 我觉得,这种情况,只有在特定的情况下才会发生! 一个就是从来没有恋爱过,听...
    枫叶红是猪阅读 334评论 20 6