iddler抓包工具在APP开发过程当中使用很是频繁,对开发者理解HTTP网络传输原理以及分析定位网络方面的问题很是有帮助。今天抽点时间出来总结一下Fiddler在实际开发过程当中的应用。
浏览器
我开发过程当中使用的比较多的抓包工具主要有MiniSniffer,Fiddler和Wireshark。其中MiniSniffer是一款体积小巧的老牌网络抓包工具,嗅探、捕获各类程序开启的网络链接数据。Wireshark是一款很是流行,功能十分强大的网络数据分析工具,能够显示网络封包的详细信息,须要网络协议有必定的了解才比较容易看懂Wireshark。Fiddler是一款定位http/https调试的工具,能记录全部客户端和服务器的http和https请求,容许你监视,设置断点,甚至修改输入输出数据。若是平时开发过程当中只是涉及到http/https上层网络协议的话,使用Fiddler足够了,这里主要总结下Fiddler的使用。
本文涉及的内容有:安全
Fiddler是一款免费且功能强大的数据包抓取软件。它经过代理的方式获取程序http通信的数据,能够用其检测网页和服务器的交互状况,可以记录全部客户端和服务器间的http请求,支持监视、设置断点、甚至修改输入输出数据等功能。fiddler包含了一个强大的基于事件脚本的子系统,而且可以使用.net框架语言扩展。服务器
Fiddler是位于客户端和服务器端之间的HTTP代理, 它可以记录客户端和服务器之间的全部 HTTP(S)请求,能够针对特定的HTTP(S)请求,分析网络传输的数据,还能够设置断点、修改请求的数据和服务器返回的数据。
Fiddler在浏览器与服务器之间创建一个代理服务器,Fiddler工做于七层中的应用层,可以捕获经过的HTTP(S)请求。Fiddler启动后会自动将代理服务器设置成本机,默认端口为8888。Fiddler不只能记录PC上浏览器的网络请求数据,还能够记录同一网络中的其余设备的HTTP(S)请求数据。数据传递流程大体以下:
1) 客户端像WEB服务器发送HTTP(S)请求时,请求会先通过代理Fiddler代理服务器。
2) Fiddler代理服务器截取客户端的请求报文,再转发到WEB服务器,转发以前能够作一些请求报文参数修改的操做。
3) WEB服务器处理完请求之后返回响应报文,Fiddler代理服务器会截取WEB服务器的响应报文。
4) Fiddler处理完响应报文后再返回给客户端。网络
如今APP中的数据传输基本上都使用HTTS传输,传输的数据都是通过加密的,这增长了咱们分析数据包的难度,还好Fiddler除了能够抓取HTTP数据包,还能够抓取HTTPS数据包。因为HTTPS传输须要使用到CA证书,因此抓取抓取HTTPS数据包时须要作一些特殊配置。Fiddler截取HTTPS报文的流程大体以下:
1) 客户端请求创建HTTPS连接,发送客户端支持的加密协议及版本列表等信息给服务器端。
2) Fiddler接受客户端请求并假装成客户端向WEB服务器发送相同的请求。
3) WEB服务器收到Fiddler的请求之后,从请求中筛选合适的加密协议。并返回服务器CA证书,证书中包括公钥信息。
4) Fiddler收到WEB服务器的响应后保存服务器证书并自签名一个CA证书,假装成服务器,把该证书下发给客户端。
5) 客户端验证证书合法性。(Fiddler可否抓取到HTTPS报文关键看这一步)
6) 客户端生产对称密钥,经过证书的公钥加密发送给服务器。
7) Fiddler拦截客户端的请求之后,使用私钥解密该报文,获取对称加密秘钥,并使用服务器证书中带的公钥加密该对称密钥发送给WEB服务器。此时对称密钥已经泄露了,之后可使用该秘钥界面客户端和服务器端传输的数据。
8) WEB服务器接收到客户端发送的加密的对称密钥后使用私钥解密,并使用对称密钥加密测试数据传给客户端。
9) Fiddler使用前面获取的对称密钥解密报文。
10) 客户端验证数据无误之后HTTPS链接就创建完成,客户端开始向服务器发送使用对称密钥加密的业务数据
11) Fiddler使用前面获取的对称密钥解密客户端发送的数据并从新加密转发给客户端。app
a) 能够到官网下载Fiddler免费安装包:https://www.telerik.com/fiddler。因为旧版本的Fiddler抓包HTPPS时须要用到FiddlerCertMaker插件,因此我这里打包了一个压缩包,包含fiddler和FiddlerCertMaker,可点击这里下载。
b) 点击Fiddler安装文件(我这里演示用的是Fiddler5.0版本)安装Fiddler。框架
若是只是须要监听本机浏览器HTTP数据包的话不须要作任何额外配置,打开Fiddler便可直接使用。通常咱们须要监听远程终端设备的网络请求,须要作如下配置。打开Fiddler,在菜单栏中选择Tools->Options->Connections。输入监听端口(默认是8888),选择Allow remotecomputers to connect,点击确认而后重启Fiddler。
因为咱们须要监手机端的网络请求,因此还须要对手机端进行设置。首先确保手机网络和安装Fiddler的电脑网络处于同一个wifi网络中。能够点击Fiddler主界面的右上角的“Online”按钮查看Fiddler所在主机的主机名和IP地址,配置手机网络时须要使用到这个IP地址。工具
打开手机网络设置,选择跟Fiddler主机在统一网络,打开wifi设置界面,进入wifi的高级设置(不一样手机设置不同,有一些手机长按选中的wifi名称能够出来,有一些手机是点击wifi名称后面的按钮,本身尝试)。Fiddler自己就是代理服务器,在wifi高级设置中的代理栏下面选择手动设置,设置输入Fiddler主机的IP地址(上一步显示的IP)和监听端口号(前面默认8888那个),点击确认。
这些配置按成之后,你在APP中打开有网络请求的操做,便可在Fiddler中看到。
在右边的Inspectors窗口中能够看到这个请求的请求报文和响应报文信息。
以上配置只能监听到HTTP报文,对于HTTPS报文没法显示内容,还须要作其余配置。测试
前面也讲了,HTTPS数据报文传输的时候涉及到证书及数据加密的问题,因此Fiddler须要抓取HTTPS报文的话还须要作其余配置。
首先仍是打开Fiddler配置:Tools->Options->HTTPS:
勾选Capture HTTPS CONNECTS和Decrypt HTTPS traffic选项,若是只是想抓取本机或者远程终端的数据报文,能够在…from all processes这个下拉框中选择。这里还有一点须要注意的就是,低版本的Fiddler自签名的CA证书有一些问题,后面导入到手机上时无效,这里就须要安装上面说的FiddlerCertMaker插件。安装后要重启Fiddler,若是安装成功在上图Certificates generated by CertEnroo engine的位置的内容就会显示安装的FiddlerCertMaker插件信息。
设置完成之后点击OK,重启Fiddler。此时在手机端操做一些有https传输的app就会发现能够看到传输的内容,可是有局限性,只有设置了信任全部证书的APP中的HTTPS报文才能查看到,这类APP是很是不安全的。若是须要抓取大部分HTTPS报文怎么办呢?
你们都知道手机系统中集成了系统认为可信的CA根证书,若是服务器的证书是这些机构颁发了,HTTPS请求时系统才认为是安全的,不然SSL握手失败(前提是APP中使用系统默认证书信任机机制)。Fiddler自签名证书确定不在系统信任的证书列表中,那怎么办呢?咱们能够在手机中把Fiddler自签名的证书导入到信任证书列表中就能够解决这个问题了。
接下来打开手机中的浏览器,在地址栏输入Fiddler监听的IP:端口,好比:192.168.1.106:8888。
点击页面中的FiddlerRoot Certificate,下载并安装证书(若是下载了没有自动提示安装,可进入设置->系统安全->从存储设备安装中手动安装)。
输入证书名称,这里命名fiddler,点击确认。若是安装成功在系统安全->信任的凭据->用户中能够看到刚才安装的证书(若是证书名称是乱码,多是Fiddler生成的证书有问题,须要安装FiddlerCertMaker插件,从新操做)。
咱们在手机端打开有HTTPS连接的APP发现能够抓取HTTPS中的数据报文了。
这样就大功告成了,你们发现大部分HTTPS请求是能够抓取到的。你们有没有发现好像HTTPS传输也不是100%安全,怎么保证不被抓包呢,下次整理一篇文章总结一下怎么防止APP被抓包。加密
以上哪里写的不对或者有待改进,欢迎你们提意见,谢谢!
原文出处:http://www.luoxudong.com/?p=306spa