Administrator
发布于 2021-11-30 / 37 阅读
0
0

Fiddler的简单使用 —— PC、手机抓包

一、前言

在日常开发遇到需要做手机端测试调试第三方的sdk包或者浏览器调试接口发现f12被限制等等情况下,我们可以选用fiddlerwiresharkcharles等抓包工具来抓取对应的请求-响应信息(接口请求方式、接口请求URL、接口请求参数、接口返回参数等)。

附言:本文介绍的是 fiddler,其他抓包工具请查阅其他资料,还有github上有很多开源的抓包工具可以自行去查找使用。

二、fiddler官网下载

百度搜索fiddler找到官网,导航栏找到fiddler tools一栏,选择并点击fiddler classic跳转到下载页面,点击download now下载。

附言:新版的fiddler everywhere已经从免费改为一个月试用了,试用起来体验像 postman,可惜收费了只能转向免费的fiddler classic了。

image.png

三、fiddler设置

1. 设置解码https请求

  • 打开菜单栏:Tools>Options...>HTTPS
  • 勾选如下的项。

image.png

2. 安装证书

image.png

证书安装完后,我们可以去windows证书管理里面查看下证书,如下图。
可见证书名称:【DO_NOT_TRUST_FiddlerRoot】。

image.png

如果是 firefox 还要导出证书(export root certificate to desktop)到 firefox 浏览器上安装。
注意:fiddler 更新可能导致证书失效,失效表现就是正常的浏览器请求都失败了,关闭 Capturing 后恢复正常。这个时候可以点击 Actions 》Reset All Certificates,移除证书,移除后会提示重新安装。安装好后,可以正常 Capturing 了。

3. 手机端抓包设置——允许远程连接 (手机抓包必须设置)

image.png

fiddler默认端口是8888,可以把它设置成任意端口。勾选Allow remote computers to connect允许远程连接。

三、PC抓包

fiddler设置操作完,就可以正常抓包了,操作也比较简单不赘述了。
有一点要注意的是我对接第三方 api 接口的时候遇到的,java 请求远程的api,fidder不能正常抓取的。这边的方案是 main 方法里设置http代理端口,如下图。端口可以在 Tools>Options...>Connections 里面查看到。

1. jdk.net包的 HttpURLConnection 可以用以下方案(走系统代理)

image.png

// 设置系统代理端口
System.setProperty("http.proxyHost", "127.0.0.1");
System.setProperty("https.proxyHost", "127.0.0.1");
System.setProperty("http.proxyPort", "8888");
System.setProperty("https.proxyPort", "8888");

2. apache 的 httpClient默认不走系统代理

需要另外设置代理,如下图代码

// 详细请看另一篇文章【java设置代理】
HttpHost proxy = new HttpHost("127.0.0.1", 8888, "HTTP");
// 1. 设置sslContext,用于https请求 2. 设置代理
CloseableHttpClient httpClient = HttpClients.custom()
         .setSSLContext(createIgnoreVerifySSL())
         .setProxy(proxy)
         .build();

四、手机抓包

fiddler设置操作完,我们还需要在手机 wifi 上设置代理,代理到电脑ip相应的fiddler的端口(8888)。注意:必须要 wifi 因为要局域网内连接到电脑的 fiddler 上。

1. 查看电脑ip

fiddler classic右上角的Online鼠标放上去可以看到 pc 局域网内 ipv4 的地址;或者 cmd 命令行下,使用ipconfig可以查看到ip地址。

image.png
image.png

2. fiddler监听的端口

前面已经多次提及了。

3. wifi设置代理

进入已经连接的wifi设置,我的红米手机可以看到代理选项(默认无),选择手动,如下截图设置。其他手机可能要点什么显示高级选项之类的选项设置。

image.png

4. 安装证书

  • 如果请求都是 http 请求是不用安装证书的,如果是 https 请求,这时候就要下载证书了。
  • 手机浏览器打开:本机ip:端口,本机ip请填前面查看电脑ip获取的 ip,端口是 fiddler 监听端口。比如我的是:192.168.0.100:8888。
  • 访问链接打开网址后找到FiddlerRoot certificate,点击下载,下载后点击安装证书就可以了。

至此手机抓包配置完毕。

五、常用功能

1. 断点(breakpoint,bp)

主要有两种类型:before requests —— 请求到服务器前拦截;after responses —— 响应到用户前拦截。

1.1 先介绍全局断点:

全局断点表示全部请求都拦截,只是区分拦截请求前还是请求后。设置如下图。

image.png

操作完,记得关闭全局断点:Rules>Automatic Breakpoints>Disabled

1.2 自定义断点(比如我只想拦截localhost:8080的请求)
  • bpu (breakpoint url):拦截指定的url。如bpu localhost:8080,如下图。取消断点,在命令行输入: bpu 回车。

image.png

  • bpafter:拦截指定url响应。如bpafter localhost:8080。基本同bpu
  • bps(status):在特定http状态码时中断。如bps 404bps 202其实就是针对状态码是200的请求设置bpafter拦截。
  • bpm、bpv(method):针对请求的方法(get、post)拦截。如bpm get。其实就是根据请求的类型(方法)设置bpu拦截。

2. 会话保存

这个十分实用。比如你要对接第三方的接口,但是接口调试不通,原因怎么也找不到。这种情况问题的原因可能会有多种:可能是发送的参数类型错了、可能是第三方加密密钥给错了、可能是第三方内部没有配置好等等。

我们可以通过 fiddler 保存请求报文到桌面,然后发给第三方对接的人员来查找问题。这样可以极大降低沟通的成本,因为可以同时看到请求和响应的数据,第一时间可以确定是请求方的问题还是响应方的问题。

操作如下图。File>Save>Selected Sessions>as Text...

image.png

3. 过滤请求(我只想看特定host的请求)

Filters 设置过滤指定的hosts,这样我们就可以专注于我们想要看的请求,如下图。

image.png

题外话 —— http协议简介

什么是http

  • 1、HTTP协议是 Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web)服务器传输超文本到本地浏览器的传送协议。
  • 2、HTTP(HyperText Transfer Protocol)协议是基于TCP的应用层协议,它不关心数据传输的细节,主要是用来规定客户端和服务端的数据传输格式,最初是用来向客户端传输HTML页面的内容。默认端口是80。
  • 3、http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议。

image.png

http请求报文

image.png

http响应报文

image.png


评论