Fiddler2 抓包工具可以让你的信息无处可藏。

1、Fiddler2 名字后面为何有个 2,而不叫作 Fiddler?

?wx_fmt=png&wxfrom=5&wx_lazy=1

这虽然是个看似无聊的问题,可是确实让我纠结了好一阵子,可能有点强迫症吧。javascript

最开始使用 Fiddler 的时候一直都是 Fiddler2 这样写着,也是这样叫着,结果有一天发现还有个 Fiddler4,瞬间就明白怎么回事了,原来数字 2 并非 Fiddler 名字的一部分,而是一个大版本号。
html

可是在全网搜了半天,包括去官网,都没找到 Fiddler3,目前为止最新的仍是 Fiddler4,全网使用的最多的也是 Fiddler2 和 Fiddler4,至于 Fiddler 和 Fiddler3 为何没有,也懒得去找了。java

2、Fiddler 的本质是服务器的代理

?wx_fmt=jpeg

启动 Fiddler 后,Fiddler 会默认以 127.0.0.1:8888 的地址和端口代理当前电脑或者服务器,因此发送到当前电脑或者服务器的 http 请求,都会先通过 127.0.0.1:8888 这个代理地址,而后在转发到真实的访问地址。
git

Fiddler 就至关于在客户端与服务端中间安装了一个中转器,这个中转器负责转发。那么,Fiddler 拿到客户端与服务器之间交互数据后,经过数据整理分析,将结果从 Fiddler 客户端展现出来,甚至能够经过 Fiddler 来修改请求数据。web

当关闭 Fiddler 的时候,Fiddler 会自动注销代理。这就是 Fiddler 实现抓包的基本原理。api

3、Fiddler 的下载和安装

能够经过地址 https://www.telerik.com/download/fiddler 来下载 Fiddler 的客户端。浏览器

?wx_fmt=png

随便选择一个使用理由,输入邮箱地址,勾选 “I accept the Fiddler End User License Agreement” 选项,点击下载。
安全

?wx_fmt=png

下载后的安装包:
服务器

?wx_fmt=png

一路下一步便可安装完成,目前最新版是 Fiddler4。
微信

4、用 Fiddler 抓取基于 http 协议的 web 网站数据

?wx_fmt=png

打开 Fiddler,整个界面分为三个区块,区块 1 是当前电脑与外网交互的地址信息,有请求结果,请求协议,访问域名,url 地址,以及返回的字节数等登。

区块 2 是请求信息,包括 header 头部信息,请求地址,请求参数等等,区块 3 是服务器响应信息。根据返回结果形式的不一样,能够分为返回网页和返回数据两种。

返回结果是 HTML 网页

咱们以访问 gitchat.cn 热门 chat 为例进行分析。

?wx_fmt=png

从图中能够看到,host 列表示访问的域名,这里是 gitchat.cn,Protocol 列表显示的是协议,这里是 http,URL 列显示的是请求路径,这里是 /gitchat/hot,Body 列表示返回的结果字节数,Content-Type 列表示返回内容的类型,这里是 html,最后 Process 列意思是进程名。

通常状况下,咱们只须要关注 Host、URL、Body 及 Content-Type 这几列,从 Body 列的字节大小,咱们能快速判断出哪些请求有大量的数据返回,再根据 Content-Type 判断返回内容的类型。

上图标红的行中,咱们能够看到热门列表页有大量的内容返回,而且返回类型是 html 网页。咱们看下区块 3 的结果。

?wx_fmt=png

咱们切到 “SyntaxView” 页签下,能够看到热门 chat 的 html 页面源码,说明请求 http://gitbook.cn/gitchat/hot 这个地址以后,服务器返回的是 html。

返回结果是数据

?wx_fmt=png

我在访问百度网页的时候,发现红框标注的请求,有大量数据返回,而且返回类型是 “application/javascript”,因而查看了下返回结果,咱们切到 “SyntaxView” 页签下,能够看到一堆可识别的数据,以下:

?wx_fmt=png

咱们选择以 “JSON” 的格式查看,以下:

?wx_fmt=png

通常状况下,咱们用 Fiddler 抓包是处在一种目标不是很是明确的状况下, 也就是说咱们不知道这个网站的哪一个地址会被抓到数据,也不知道会被抓到什么数据,只是在浏览这个网站的过程当中,经过 Fiddler 的请求状况来分析,哪些数据可能有用。

这些数据每每是在网站或者 APP 上正常操做时看不到的数据,而经过 Fiddler 的抓取,就能捕获到这些隐藏的数据。

Fiddler 还经常被用做爬虫的辅助工具,先用 Fiddler 过滤一遍目标网站或者 APP,捕获到可以拿到目标数据的 URL 及参数,而后再经过爬虫程序访问这些 URL 及参数,就能够爬到目标数据。

通常经过接口返回数据的状况多见与 APP,好比这个连接 “http://shipper.huodada.com/freight/findByPage.shtml?startDistrict=&endDistrict=&rows=400&page=1&sidx=update_time&sord=desc” 就是经过爬取某 APP 拿到的数据接口,直接访问这个连接,能够看到 JSON 格式的数据源。

?wx_fmt=png

5、用 Fiddler 抓取基于 https 协议的新浪微博

Fiddler 除了能够抓取 http 协议的数据外,同时也能够抓取 https 协议的数据,只是须要作额外的配置,方法以下:

?wx_fmt=png

依次打开菜单栏的 Tools》Options》HTTPS 标签,勾选 “Decrypt HTTPS traffic” 选项和 “Ignore server certificate errors(unsafe)” 选项,重启 Fiddler。这个时候访问基于 https 协议的网站,就能抓取到该网站的信息,咱们以新浪微博为例。

?wx_fmt=png

能够看到,抓到的大部分都是图片,其中有一条返回 2907 个字节的应该不是,咱们看下返回结果。

?wx_fmt=png

从备注看,这应该是服务器的某些证书信息。咱们再看下有哪些图片。

?wx_fmt=png

张一山?

?wx_fmt=png

极光之恋?

?wx_fmt=png

奇门遁甲?

固然,这些照片都是新浪微博首页的照片,想看的话直接去首页,不用费劲用 Fiddler 抓取,这里只是作说明举例而已,掌握了抓取 https 协议数据的方法,能看网页显示出来的数据,固然也就能看网页显示不出来的隐藏数据,这个就靠我的发挥了。

刀法已经交给你了,至于你是用来杀猪仍是用来行侠仗义,你本身说了算。

6、用 Fiddler 抓取手机 APP 的通信数据

抓取手机的通信数据,须要在 Fiddler 和手机端同时进行配置,过程稍微复杂一些,下面我详细说明。

第一步,配置 Fiddler 容许远程链接,如图:

?wx_fmt=png

依次打开菜单栏的 Tools》Options》Connctions 标签,勾选 “Allow remote computers to connect” 选项,容许远程服务器链接,重启 Fiddler。

第二步,在手机端将安装 Fiddler 的电脑设置为手机的代理地址。

找到手机已经链接的 wifi 网络,点击后弹出修改,在高级代理中找到代理设置,将代理设置改成手动,这时会显示设置代理地址及端口的输入框(不一样的手机操做过程稍微会有些差别,最终的目的都是设置手机的代理地址,能够根据不一样品牌型号的手机在百度搜索相关设置方法)。

?wx_fmt=png

设置代理地址。

?wx_fmt=png

代理地址是你打开 Fiddler 的这台电脑的内网 IP 地址,window 系统能够在 cmd 命令模式下输入 ipconfig,查看当前电脑的内网 IP 地址。个人电脑 IP 地址是 192.168.1.34。

代理端口填写 8888,点击保存,以下图:

?wx_fmt=png

第三步,访问代理地址,下载并安装证书,完成配置。

?wx_fmt=jpeg

下载并安装证书:

?wx_fmt=jpeg

至此,全部的配置完成。如今,经过手机与外网通信的数据,均可以被 Fiddler 捕获了。例如,咱们经过微信打开 gitchat 的微信公众号,在 Fiddler 中就能够看到 gitchat 公众号的头条文章的图片数据,如图。

这是在 Fiddler 中捕获到的数据:

?wx_fmt=png

GitChat 微信公众号中的图文图片:

?wx_fmt=jpeg

一样的,在网页中可以捕获到的数据,在 APP 上都能捕获到,甚至在 APP 上捕获到的隐藏数据会更多,由于大部分 APP 都是以接口的形式与服务器进行通信的,接口中会包含大量数据,直接捕获到接口地址及参数,就能够直接调用接口获取数据。

本文主要讲解 Fiddler 的使用方法和场景,因此在举例中尽可能避开敏感内容,Fiddler 是一把双刃剑,能够用来抓取合法的数据,同时也能用来抓取隐私数据,在使用中请你们必定要遵照规则。

7、用 Fiddler 设置断点修改 Response

Fiddler 不但能够用来捕获通信数据,同时也能够用来修改请求内容以及服务器响应结果。此功能通常用到的较少,并且通常都是作前段开发共能调试时用到,因此这里就简单说明下。

在菜单栏中,点击 rules->automatic Breakpoints-> 选择断点方式,方式有两种,一种是请求以前进入断点,i 中是服务器响应以后设置断点,其实就是对请求内容和服务器返回结果的两种状况设置断点。

好比咱们选择了请求以前进入断点,这时咱们一旦用浏览器访问某个页面,在请求发送出去后,会在 Fiddler 停留下来,这时能够更改请求中的数据,而后执行后续操做,这样服务器接收到的请求就是修改过的。

同理,在服务器响应以后修改数据,就是直接修改了服务器的返回结果。

这块技巧在实际中用的比较少,若是有人对这块感兴趣,能够在评论中提出,我会在后面的交流中详细讲解这块内容。

8、关于反 Fiddler 抓取的几点思考

因为 Fiddler 的功能很是强大,因此咱们在作产品开发时,要尽可能的规避 Fiddler 的抓取,尤为是 APP 与服务器通信时,更要注意接口的严谨性和安全性。能够考虑从如下几点入手:

  1. 在作 APP 接口时,与接口通信的数据尽可能进行加密后再传输,不要采用明文,这样会从很大程度上避免被抓取数据;

  2. 接口返回的数据尽可能少,也就是 APP 须要哪些数据就只返回哪些数据,不要由于偷懒将全部数据返回,这样一旦数据被抓取,就会泄露不止当前接口业务的数据;

  3. 参数必定要作严格验证,避免有人恶意猜想构造参数,非法访问服务器。

本次关于 Fiddler 数据抓取的话题就到这里,有疑问的同窗能够留言提问,也能够在读着圈提问,我看到后会尽可能在第一时间回复你们。感谢你们的参与。

9、注意事项

用 Fiddler 抓取网页传输数据的时候,常常有人遇到没法抓取的问题,尤为是 https 协议的网站,在 Fiddler 上数据根本就不显示。

通过反复地尝试,我发现问题出在浏览器上,有些浏览器可能对代理作了屏蔽,经过这些浏览器访问的网页,不会在 Fiddler 上显示数据,感受像是代理失效了同样。

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------