Fiddler抓包工具

Posted by Allen Vork on April 8, 2018

简介

Fiddler 是一个 http 抓包工具,具有以下功能:

  • 能够记录客户端和服务器之间的所有 HTTP 请求,针对 HTTP 请求分析请求数据,设置断点等。
  • 能够修改请求的数据,并能实现请求自动重定向,从而修改服务器返回的数据。

场景

本文主要介绍如何用 fiddler 抓取 android 手机上的请求。

配置

配置 Fiddler

安装完后,点击菜单栏上的 Tools -> Options 然后去修改下面两个地方:
我们可以设置本地代理端口号,默认为 8888,一般不改。然后打开远程连接来允许调试手机。 如果项目中使用的是 https 协议,则需要按上图开启 https 支持。完成后,重启 Fiddler 即可。

配置手机

将手机和电脑连在同一局域网下,然后进入当前连接的 wifi,设置代理: 需要设置上面的服务器和端口,其中服务器地址(即电脑的 IP 地址)可以看 Fiddler 上的 Online 将鼠标放在 Online 上就可以看到一个弹框,里面有 IP 地址: 172.18.4.156。你也可以打开 cmd,输入命令 ipconfig 就可以看到。端口号可以在上面第一张图上设置,默认为 8888。
由于项目中使用的是 https,我们手机需要下载证书才能支持。那么我们进入手机浏览器,输入[服务器地址]:[端口号],如172.18.4.156:8888。然后点击链接下载证书即可。

Fiddler 使用

查看请求以及请求回来的数据

上面配置完后,手机进行请求就可以在 Fiddler 面板的左边看到会话了。点击我们关心的某个会话,然后在右边的面板选择 Inspectors 就可以看到请求的数据和返回的数据了。

请求太多?仅显示我们想要的请求

我们可以仅仅过滤我们需要的某个域名的请求:
点击面板右边的 Filters,然后勾选 Use Filters,然后将 No Host Filter 改成 Show only the following Hosts,然后将左侧面板里面想显示的 host 填进去,再点击 Changes not yet saved即可。

拦截指定请求,返回我们自定义的数据

譬如说我们需要将 B 请求的数据替换为 A 的数据:

  1. 拿到 A 请求返回的数据:首先右键点击面板左边的你想要的 A 请求,点击 save -> Response -> Response Body 将 A 请求返回的 json 串保存下来。
  2. 格式化 json 串:我保存下来的 json 串被插入了一些字符进去了,我们需要将这些字符删除掉,我们可以进入前面的这个网站,将 json 串拷贝进去,然后点击格式化,如果格式化不成功,看看哪里有不连贯的地方(看哪一行的字符串后面有空白,一般第一行就有),然后直接将该行删掉,然后将该行的上下两行连起来,直到成功格式化。 成功后将数据保存到本地如 a.json。
  3. 点击面板右边的 AutoResponder,勾选 Enable Rules(开启自动重定向功能,这样我们就可以在下面的面板添加重定向规则了), Unmatched request passthrough(仅重定向满足条件的请求)
  4. 手机开始进行 B 请求,然后将 B 请求从左边面板拖动到右边,就可以看到:
  5. 点击拖到右边面板的请求,然后将将前面保存的想替换的数据导进来,然后点击 save 即可。

我们除了可以修改这个请求返回的数据外,必要情况下还要修改请求。因为一个请求后面会带很多参数(譬如请求的时间,每次都不一样),即使同一个请求,但请求的 url 都不同,这样会导致匹配不到这个 url,所以前面修改的请求返回的数据也不生效。这时我们只需要请求匹配前面一部分就行了。 我们看下这个请求,我们仅仅需要问号前面的 url 匹配的话,就将该请求返回的结果替换成 a.json。 那么我们直接修改该 url,将 Extract 替换成 regex,然后将问号后面全删掉,替换成 .* 即可。然后点击 Test... 来测试修改后的 url 能否匹配到原始的 url。
这样,只要 url 前面匹配的话就直接将返回数据替换成 a.json。