相信我们的读者中有不少是做手机测试的同学,如果我们的被测APP是有网络交互功能的(比如说一个电商APP或者论坛APP亦或是一个照片云存储的APP),那么如何来监测、调试以及修改这些API请求或者图片请求呢?就需要我们的Fiddler出马了,Fiddler可以帮助我们查看手机的HTTP/HTTPS流量,让我们来看看如何操作吧
查看手机流量需要在Fiddler所做的设置及其原理
在上一讲中我们介绍了Fiddler的工作原理实际是做为一个代理服务器的存在,检视通过这个代理服务器的流量,所以查看手机流量的思路也是很简单的将手机的代理服务器设置成我们的Fiddler就好了,具体的设置方法会在下面介绍,首先我们需要在Fiddler中做一个简单的设置,开启他的远程调试功能,否则Fiddler是只能查看本机流量的。
打开安装好的Fiddler,在菜单栏里选择Tools->Fiddler Options,打开Fiddler选项对话框,再选择Connections标签页,我们需要代理设置端口号和Allow remote computers to connect选项:
这个端口号是Fiddler代理服务的端口号,在后续设置代理时会用到,所有的代理流量都是通过这个端口发送给Fiddler的,如果在公司测试时发现别人代理到了自己的机器而造成了多台设备的流量交叉不好判断,也可以修改这个端口号并修改自己使用的测试机的代理设置。要顺手说一句的是,设置了代理的手机如果目标代理服务器端口是没有启用Fiddler的,那么这台手机时无法正常上网的,如果经常使用Fiddler调试手机流量,在手机无法正常上网时不要忘记检查一下手机的代理设置哦。
第二个需要关注的选项Allow remote computers to connect是一个Checkbox,勾选后Fiddler就可以查看非本机但是代理到本机设置端口的流量了,如果没有开启此选项,即使在手机上设置的正确的代理也是无法看到HTTP流量的,且手机无法正常上网,原因请参考上面一段,该选项需要重启Fiddler生效,点击确定时会提醒你的。
顺手提一句的是Act as system proxy on startup选项,这个选项是默认勾选的,如果你的主业是手机测试,那么推荐把这个选项去勾选,在Fiddler启动时就不会自动注册为系统的代理,本机的IE/Chrome等应用的流量就不会在Fiddler上显示了,去除了无关流量的干扰。
设置手机代理还需要知道安装Fiddler机器的IP,方法有很多,比如CMD命令行中的ipconfig命令,不会的同学可以去学习一下。
查看Android手机的流量
在Android手机点击“设置”→“WI-FI”,长按处于需要设置代理的WI-FI;如XXXXX-3w-test.出现如下图提示框,点击“修改网络配置”。
在提示框里勾选“显示高级选项”,代理设置选为“手动”,将代理主机名和代理服务器端口改为电脑的IP地址,填好代理服务器端口,即上一步中我们设置的端口号。
点击存储后便完成了代理服务器的设置,如果这个WIFI是没有连接的,主动连接这个WIFI,尝试在手机浏览器上访问几个网页,看看Fiddler中是否有相关的流量信息,有则代表设置成功了。
需要注意的是代理设置是跟随WIFI的,如果发生了WIFI自动切换,且切换后的WIFI没有设置代理,那么自然切换WIFI后就无法看到手机相关的流量信息了,在Fiddler明显丢失手机相关数据包时可以查看下是否发生了WIFI切换的现象。另外由于某些手机的BUG,针对当前已连接的WIFI的代理设置有概率失效,断开再重连配置好代理信息的WIFI热点即可。
查看IPhone手机的流量
Iphone手机的代理设置和Android手机类似,在iOS设备中,依次打开“设置”→“WI-FI”,点击处于连接状态的WI-Fi(如还没有连接WI-FI需要先进行连接);如XXXXX-3w-test.进入如下界面:
在HTTP代理处将“关闭”切换为“手动”。 在“服务器”输入框处填上要代理上的电脑的IP地址,填好代理服务器端口:
点击左上角“<无线局域网”返回保存,即可完成设置。
查看WinPhone手机的流量
噢,对不起,作者并没有Windows Phone手机,没法给出具体步骤,但是大体思路应该是一致的,在Wifi界面找到相关代理设置即可。
还可以用于Linux及Mac系统哦
是的能够设置代理的系统都可以使用Fiddler来查看HTTP流量,也可以通过Fiddler做跳板访问HTTP网页
举个例子,Windows和Linux双机办公,通常都是Windows有外网权限,Linux仅有内网权限,通过将Linux的代理设置设置到Windows的Fiddler上,便可以使Linux也能够访问网页了。当然公司的外网隔离机制是为了保护每个公司的信息安全的,所以即使掌握了这项技术也不要用于非法用途哦。
如果只有Linux或者Mac单机怎么办呢?我们可以在Linux或Mac机器上安装Windows虚拟机,然后在虚拟机上安装Fiddler,并将宿主机器的代理指向虚拟中的Fiddler设置(记得Fiddler要打开支持查看远程流量哦),当然这种操作仅能用于查看Linux和Mac机器上的HTTP流量,是无法达成上文中的跳板效果解除外网限制的,相信聪明的你一定知道为什么。
至于Linux和Mac系统上的代理设置,作者确实有这些机器,但是相信都是用这么非主流系统的你了,一定知道怎么设置代理或者能够有办法找到答案,我就不再像之前Android和IOS设备一样截图说明了。
这么强悍的功能有什么限制么
当然这么强悍的功能还是有其自身的限制的,这些限制也是和Fiddler自身的缺点息息相关的,比如:
- 我们仅能Debug HTTP流量,对直接使用TCP报文传输的游戏应用等就无能为力了,这种时候需要使用wireshark配合tcpdump命令来做,超出本文范畴了。
- Fiddler在处理超过2G的大包时有性能问题,实际根据机器性能可能超过200M都会有Fiddler卡顿的现象,所以尽量不要用于debug较大的数据包
- Fiddler默认会采取存储转发的机制,会将每一条Response完全接收后再转发给请求方,所以在处理下载,流媒体播放时可能存在问题,但是Fiddler提供了Stream模式用于解决这个问题,在Stream模式下所有的数据都会在收到后直接传递给请求方或接收方,Fiddler仅在此模式下仅能用于查看流量而无法对流量做修改操作
- 目前我们进能抓取到HTTP包的信息,如果需要抓取HTTPS包的信息需要安装证书,我们会在下一节中来学习HTTPS协议和其抓包方法