使用 Fiddler
工具抓包,分析网络状态。
Fiddler
安装
Fiddler
的安装非常简单,只是抓取 Https
时需要安装证书,可能会存在些问题。
下载并安装
官网 下载 Fiddler Classic
基础版本,选择自己的目录安装;安装成功后,运行 Fiddler
工具,打开浏览器后,可以看到所有的网络请求都通过 Fiddler
代理并访问,但是 Https
相关无法查看信息。
因为 Https
连接需要证书校验,所以使用 Fiddler
做代理时,需要正确安装 Fiddler
的证书。
导出 Fiddler Https
证书
Fiddler
打开后,在 Tools -> Options -> Https
界面,勾选 Decrypt HTTPS traffic
,此时会提示是否重新生成证书并导入 Windows
,选择“否”!这里很容易出现后续的证书校验问题,选择否后,手动导入 Fiddler
证书。
勾选 Decrypt HTTPS traffic
和 Ignore server certificate errors(unsafe)
后,导出 Fiddler
证书到桌面,文件名为 FiddlerRoot.cer
。
在 Windows
中安装 Fiddler
证书
双击导出的 FiddlerRoot.cer
证书文件,选择“安装证书”:
安装过程中,“将所有的证书都放入下列存储” 选择 “受信任的根证书颁发机构” !!
导入成功后,可以通过 win+R
输入 certmgr.msc
打开证书管理器,分别在 “个人,受信任的根证书颁发机构,中间证书颁发机构” 三个地方的证书中,查找到 DO_NOT_TRUST_FiddlerRoot
这个证书,表示 Fiddler
证书导入成功了。
如果三个地方有的没有这个证书,鼠标右键选择 “所有任务 -> 导入” ,手动导入刚才的证书文件,导入完成后再查看是否包含 DO_NOT_TRUST_FiddlerRoot
证书。
在 Chrome
浏览器中安装 Fiddler
证书
Windows
中 Fiddler
证书安装成功后,我们希望通过 Chrome
浏览器查看网页,可以检查 Chrome
中证书是否同步安装成功。
打开 Chrome -> 设置 -> 隐私设置和安全性 -> 管理证书
同样,在 “个人,受信任的根证书颁发机构,中间证书颁发机构” 三个地方的证书中,查找是否包含 DO_NOT_TRUST_FiddlerRoot
证书,如果没有手动导入证书。
安装完毕后,重新打开 Fiddler
软件和 Chrome
浏览器,输入 https://www.baidu.com/
正常打开,表示证书正确安装并能通过 Fiddler
抓包!!
如果提示 ERR_CERT_AUTHORITY_INVALID
表示证书不匹配,在上面所有包含 DO_NOT_TRUST_FiddlerRoot
证书的地方,将该证书删除,重新导出证书再走一遍导入流程。
手机通过 Fiddler
抓包
使用 Fiddler
对手机端抓包时,也需要在手机中导入证书;如果 App
是 OkHttp
来连接时,需要实现 sslSocketFactory,hostnameVerifier
,通过所有证书校验。
Fiddler
允许远程连接
打开 Fiddler -> Tools -> Options -> Connections
勾选 Allow remote computers to connect
,允许手机远程连接到 Fiddler
。
手机 Wifi
连接时设置 Fiddler
代理
在 Fiddler
工具中,查看对应 IP
,代理的端口为 8888
。
因为是局域网代理,所以手机端和 Windows
电脑必须处于同一个局域网,通常连接同一个 Wifi
就行。打开该 Wifi
设置手动代理及端口:
设置完代理后,手机端的所有请求都能在 Fiddler
中查看到了;如果需要查看 Https
的请求,需要在手机端安装 Fiddler
证书。
手机浏览器下载 Fiddler
证书
Fiddler
代理的 Wifi
连接成功后,打开浏览器,输入 IP:port
下载 Fiddler
证书。比如在 UC
浏览器输入 192.168.47.236:8888
下载并安装证书
下载完成后,点击该证书文件并安装
安装成功后,在手机 “设置 -> 安全性和位置信息 -> 加密与凭据” 这个界面:“用户凭证” 中可以找到刚才安装的凭证;“信任的凭据 -> 用户” 中,可以找到 DO_NOT_TRUST_FiddlerRoot
证书!!
手机端 Fiddler
证书安装完毕!!
OkHttp
中校验
手机 App
在做网络请求中,如果使用 OkHttp
请求 Https
连接,需要重写 sslSocketFactory,hostnameVerifier
,确保证书能校验通过!
1 | okHttpClient = new OkHttpClient.Builder() |
验证
修改完 App
后,重写打包安装,并连接 Fiddler
后,发出 HTTPS
请求,查看是否能正确解析数据。
常见问题
Fiddler
证书重置
Fiddler
工具重置证书后,一定要将 Windows,Chrome
以及手机端中对应的证书删除后重新导入,否则会因为证书校验失败,HTTPS
无法连接,出现 ERR_CERT_AUTHORITY_INVALID
。
可能会重置证书的常见操作:
显示 WebSocket
工具栏
如果双击 websocket
建立的连接,没有看到 WebSocket
工具,修改方式为:
工具栏 Rules --> Customize Rules...
,打开后,添加如下代码:
1 | class Handlers |