HTTP抓包之接口自动化测试:Fiddler如何抓包?
Posted 一口Linux
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP抓包之接口自动化测试:Fiddler如何抓包?相关的知识,希望对你有一定的参考价值。
Fiddler在使用的过程中经常会碰到一些问题。这章补充一些Fiddler的用法。
2.1 Fiddler必须要做的3个设置
Fiddler需要进行3个设置,这样做使用Fiddler的过程才能顺畅。
2.1.1 第1个设置:在Fiddler中安装证书
大部分网站都是使用HTTPS协议,所以必须安装证书,这样才能捕获HTTPS,如图2-1所示。
如果证书没有安装成功,那么Fiddler只能抓到HTTP请求,抓不到HTTPS请求,如图2-2所示。所以一定要想办法把证书安装好。
图2-1 Fiddler安装证书
图2-2 没有抓到HTTPS
2.1.2 第2个设置:自动解压HTTP响应
在Fiddler工具栏中选中“Decode”按钮,如图2-3所示。这样就会自动解压HTTP响应,否则我们看到的HTTP响应是乱码。
图2-3 Fiddler选中Decode按钮
2.1.3 第3个设置:隐藏“Tunner to”请求
可以在Fiddler中隐藏“CONNECT Tunnels”请求,如图2-4所示。隐藏的方法是选择菜单栏中的Rules→Hide CONNECTs。这样Fiddler就不会捕获大量无用的握手验证请求,如图2-5所示。这些“Tunnel to”的请求对我们没什么用处。因为我们平常根本不关心HTTPS是如何建立连接的。我们抓包是为了看HTTP请求和响应的数据内容,抓HTTPS也是看数据内容,而不关心HTTPS的通信是怎么建立的。
图2-4 在Fiddler中选中Hide CONNECTs
图2-5 Fiddler中的握手验证请求
2.2 不允许抓包
软件开发商并不希望自己的软件被人抓包,抓包意味着自己的接口全部被人看得一清二楚,存在很多安全隐患。有很多App采取各种措施来防止被抓包。
2.2.1 某些App抓不到包
某些App为了不被抓包,直接会在代码里设置不允许使用代理,这样Fiddler就抓不到了。
有些App能抓包,说明Fiddler的设置是正确的。某些App不能抓包,原因有很多,如下。
- 可能是Fiddler证书原因,解决方法是需要用证书插件来重新制作一个证书,然后重新配置。
- 这个App的开发者进行了特殊设置,不让抓包。
2.2.2 HTTP请求和响应全部加密
图2-6是一个查违章的App的抓包内容,可以看到这个App可以被抓包,但是其HTTP请求和HTTP响应全部被加密了,安全性很高。
图2-6 查违章App的接口全部被加密
2.2.3 不让抓包
银行的App对安全性要求很高,所以一般不允许抓包。某款银行App在用Fiddler抓包的时候,App会提示网络错误,不让抓包,如图2-7所示。
图2-7 某银行App不让抓包
2.3 Fiddler抓不到包
在使用Fiddler的过程中,有时候会发现Fiddler抓不到包。下面介绍如何解决抓包失败的问题。
2.3.1 Fiddler的抓包开关
Fiddler有一个抓包的开关。打开状态栏的时候,状态栏的最左边有个“Capturing”图标,如图2-8所示。如果没有这个图标,当然抓不到包了。初学者很容易忘记这个开关。
图2-8 Fiddler的抓包开关
2.3.2 浏览器抓不到包
Fiddler能抓包是因为它是一个代理服务器。需要抓包的程序必须把代理指向Fiddler才行。如果浏览器抓不到包,可能是因为浏览器的代理设置没有指向Fiddler。我们可以先重启Fiddler,然后查看浏览器的代理服务器设置,或者换不同的浏览器试试。
我们先来看一下Fiddler的抓包原理图,如图2-9所示。
图2-9 浏览器的抓包原理
如果是某一个浏览器抓不到包,解决方案是换其他的浏览器。比如IE和Chrome都能抓到,只是Firefox抓不到包,说明Fiddler本身没有问题,可能是Firefox的代理设置没有指向Fiddler。
如果是所有的浏览器都抓不到包,这说明整个Fiddler都不工作。那么要先重启Fiddler,再检查下系统的代理设置,如图2-10所示。
图2-10 系统代理设置
设置系统代理的打开方式为:控制面板→Internet选项→连接→局域网设置→代理服务器。
2.3.3 能抓HTTP不能抓HTTPS
如果发现Fiddler可以抓到HTTP的请求,但是抓不到HTTPS的请求,这说明没有安装Fiddler的证书或者安装Fiddler证书失败。Fiddler可能会提示你安装证书。解决办法是重新安装证书,再重启Fiddler,如图2-11所示。
图2-11 重新安装证书
重新安装证书的操作是Options→Actions→Trust Root Certificate。
2.3.4 抓不到手机中的包
很多人会碰到这种情况:Fiddler能抓本地计算机浏览器的包,但是抓不到手机的包。本地计算机和手机位于同一个网络,各种配置也正常,但是手机的包就是抓不到。
出现这样的问题的原因是Fiddler所在的计算机和手机之间的网络不通。即使Fiddler所在的计算机和手机连的是同一个Wi-Fi,也可能网络不通。在同一个Wi-Fi下,网络不一定是通的。操作系统上的防火墙或者其他软件的设置都会影响网络的通信。我们需要通过下面的步骤来检测网络是否是通的。
第1步:测试Fiddler能否捕获本地计算机的浏览器的包,如果本地浏览器都不能抓包,那就说明Fiddler的配置有问题。
第2步:如果Fiddler所在的计算机的IP地址是192.168.0.100,那么Fiddler证书网站的网址是http://192.168.0.100:8888。用计算机的浏览器访问Fiddler证书网站,如图2-12所示。
图2-12 Fiddler Echo Service网页
第3步:在手机没有设置代理的情况下,在手机上用浏览器打开Fiddler的证书网站。
如果网页打不开,说明网络不通,原因可能如下。
- 手机和计算机不在同一个网络。
- Fiddler的允许远程连接的设置没有打开。
- Windows的防火墙关闭(防火墙打开,可能会禁止8888端口对外开放)。
只有Fiddler证书网站能打开,才能说明手机和计算机的网络是通的。再去修改手机上的代理设置,Fiddler才能对App进行抓包。
2.3.5 经过上面的设置,还是抓不到包
可以考虑换台计算机、换个手机试试,或者换别的抓包工具试试。
2.3.6 mac OS系统上抓包
Fiddler是用C#开发的,目前对mac OS的支持不太友好。现在很多人都用Mac笔记本办公,在mac OS系统上抓包可以考虑用另外两个工具:浏览器开发者工具和Charles。
2.3.7 Fiddler证书安装不成功
有时候会碰到Fiddler安装证书不成功的情况,如图2-13所示。
图2-13 证书安装不成功
这种情况一般在Windows7系统中出现,可以试图用下面介绍的两种方法来解决。
方法1:从别的机器中复制一个Fiddler根证书“FiddlerRoot.cer”放到Fiddler的安装目录下面,然后再重新配置证书,如图2-14所示。
图2-14 Fiddler证书
方法2:使用Fiddler证书制作工具来重新制作证书,详细步骤如下。
第1步:在Fiddler中删除证书。打开Fiddler,依次打开Tools→Options,取消选中Decrypt HTTP traffic,并且在Actions中单击“Remove Interception Certificates”,如图2-15所示。
图2-15 Fiddler删除证书
第2步:卸载证书。找到Fiddler的安装目录,其中有个unCert.exe文件。如果没有unCert.exe就不需要卸载,如图2-16所示。
第3步:使用Fiddler证书制作工具来重新制作证书。下载Certificate Make插件,运行下载的文件之后会生成新的证书。
第4步:在Fiddler中重新配置证书。
图2-16 Fiddler卸载证书
2.3.8 ios系统10.3以上,手动信任证书
若iOS系统版本是10.3以上,那么证书可能没有被信任,需要手动设置信任证书。依次打开设置→通用→关于本机→证书信任设置,将Fiddler证书启用即可,如图2-17所示。
图2-17 iOS中启用Fiddler证书
2.4 Fiddler包太多找不到自己想要的
Fiddler启动后,Web Session列表就会抓到很多HTTP请求,初学者往往会比较迷茫,因为找不到自己要抓的包。下面介绍几个方法来找到自己要抓的包。
2.4.1 停止抓包
最推荐使用这个方法。在抓包之前,先把Web Session里面抓到的数据包全部清空,然后再操作网页。在抓到想要的包后,就暂停抓包,这个方法简单、实用。熟练使用这个方法后,就不需要使用其他过滤的方法了。抓包开关如图2-18所示。
图2-18 抓包开关
2.4.2 只抓手机,不抓本地的包
在专门抓App的包的时候,Fiddler里面混杂了本地计算机和手机App的包,如果只想抓手机App的包,这时候可以选择“…from remote clients only”,如图2-19所示。
图2-19 设置只抓远程的包
2.4.3 过滤会话
Fiddler有非常强大的过滤会话的功能,假如不想看到localhost的数据包,就可以把它隐藏。过滤的设置如图2-20所示。注意,在设置时两个Host之间要用分号隔开。
图2-20 用Filters选项卡隐藏localhost
注意:使用了Filters选项卡后,记得取消Filters选项卡。可能下次抓包的时候,忘记设置Filters选项卡而抓不到包。很多人犯过这个错误。
2.4.4 只抓特定的进程
在状态栏中选择Web Browsers或者Non-Browser来选择进程,如图2-21所示。此外,工具栏中还有个按钮:Any Process,单击这个按钮把十字图标拖曳到想要抓包的程序上面,就只会抓特定进程的包,如图2-22所示。
图2-21 状态栏上按进程过滤
图2-22 只抓特定的进程
2.4.5 观察URL和HOST
观察图2-23中的URL,可知这是登录相关的数据包。URL的命名都会是有意义的。比如登录的接口会包含login,注销的URL中会包含logout。
图2-23 观察URL
2.4.6 查看进程发包
进程是计算机中程序的一次运行活动。Fiddler的Process列对应本地Windows进程。通过这一列我们可以知道是哪个进程在发包,如图2-24所示。
图2-24 在Fiddler中查看进程
2.5 HTTPS是否安全
Fiddler能分析HTTPS流量是不是意味着HTTPS协议不安全?
HTTPS是安全的,Fiddler抓HTTPS的时候安装了一个Fiddler的证书,所以Fiddler可以解密HTTPS的内容。HTTPS请求从计算机上发送到网络后,HTTPS的内容全部是加密的。
2.6 计算机连接手机热点抓包
在没有Wi-Fi的情况下,我们用手机开热点,计算机连接手机的热点来上网,这个时候计算机上的Fiddler能否抓到手机上的包呢?答案是不能。因为手机开热点后,采用的是GPRS手机流量上网,这个时候手机不能设置代理服务器的,如图2-25所示。
图2-25 WLAN热点
如果有两个手机,一台计算机,那么就可以抓包了。一个手机当成热点,另外一台手机和计算机都使用这个热点上网,手机的代理就可以指向计算机了。
客户端如何抓包
如果程序是用.NET开发的,那么Fiddler可以抓到包。因为.NET程序默认会使用系统代理。如果程序是用别的语言开发的,只要这个程序支持用户自定义代理,那么Fiddler也可以抓到包,比如Fiddler可以抓QQ。
如果客户端程序不支持代理,那么Fiddler就抓不到包了。
2.7 Fiddler测试App升级
Fiddler常用于App的升级测试,我们可以利用Fiddler伪造响应来测试App升级。
2.7.1 App升级原理
App是否升级的检查是在启动App访问服务器时进行的,把本地计算机上App的最新版本号与服务器端的最新版本号作对比,如果不一致就提示升级。
App升级的时候,App会发送一个HTTP请求,来问服务器有没有最新版。如图2-26所示,如果没有最新版,服务器返回的HTTP响应中会说没有更新。
图2-26 App没有新版本
如果有最新版,服务器返回的响应会告知有新版本,并且App端会有弹窗提示,如图2-27和图2-28所示。
图2-27 App有新版本
图2-28 App更新提示
2.7.2 App升级的测试
在实际测试中,我们一般不会去修改服务器,因为修改服务器会遇到下述问题。
- 修改服务器的代码,需要有很好的代码能力,99%的人做不到。
- 修改服务器的代码,还需要重新部署,耗时耗力。
- 不灵活,升级的情况有好几种,每次修改都要重新部署。
用Fiddler来模拟升级比较简单,如图2-29所示。
图2-29 Fiddler模拟
我们用Fiddler伪造一个HTTP响应就可以了。可以用下断点的方式修改HTTP响应,或者用Fiddler中的AutoResponder。接下来以坚果云为例介绍一下升级。
2.7.3 坚果云的升级
坚果云每次启动的时候,都会调用一个latestVersion的接口来查询服务器,看客户端有没有更新的版本,如图2-30所示。
对比HTTP响应中的版本和本地版本,如果服务器返回的版本更高,那么客户端就会弹出对话框,提醒用户升级App。
图2-30 坚果云的升级
2.8 短链接
短链接就是把普通网址转换成比较短的网址(如https://dwz.cn/8oVtHHyH)。在微博或者其他限制字数的应用里,短链接有很多好处:网址短、字符少、美观、便于发布和传播。
我们平常工作中写邮件使用短链接也会让邮件更加简洁和美观。
2.8.1 短链接原理解析
当我们在浏览器里输入https://dwz.cn/8oVtHHyH时:
- 浏览器会发送一个HTTP GET请求给dwz.cn;
- dwz.cn服务器会通过短码8oVtHHyH获取对应的长网址;
- 服务器返回HTTP 301或者302的响应,响应中包含了长网址;
- 浏览器会跳转到长网址。
2.8.2 使用短链接
短链接的服务提供商有很多,比如:百度短网址http://dwz.cn,如图2-31所示。
图2-31 使用百度短网址
2.8.3 Fiddler抓包短链接
打开Fiddler,再打开浏览器,输入网址https://dwz.cn/8oVtHHyH。用Fiddler抓包短链接如图2-32所示。
图2-32 Fiddler抓包短链接
从图2-32中可以看到短链接的原理很简单,利用HTTP协议的跳转,用301或者302都可以。
2.9 本章小结
本章介绍了Fiddler的常用使用技巧,包括抓包设置、抓不到包的解决方法等。读者可以对照本章排查Fiddler使用过程中遇到的问题。此外,读者还可以了解用Fiddler测试App升级和短链接的概念。
以上是关于HTTP抓包之接口自动化测试:Fiddler如何抓包?的主要内容,如果未能解决你的问题,请参考以下文章