您的位置:首页 > 移动开发 > Android开发

Android 抓包工具 Fiddler

2017-08-26 00:03 162 查看


前言

在 Android 开发中,一般情况下不用去抓包,因为网络请求都会设置 Log 输出进行查看。

以下情况你可能需要抓包:

需要了解自己应用的整体网络请求状况。

第三方 SDK 会发起网络请求,在使用这些 SDK 时如果出现问题时,而恰好没有日志输出。

想要了解某个 APP 使用的接口。

手机上已经有些 APP 可以进行抓包了,比如 Packet CaptureHTTP Injector ,GitHub 上看到这个 AndroidHttpCapture APP 项目。

但这些都不如 PC 端专业抓包工具 Fiddler 功能强大。

Fiddler 简介

Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。也可以用来检测网络安全。



Fiddler是通过改写HTTP代理,让数据从它那通过,来监控并且截取到数据。当然Fiddler很屌,在打开它的那一瞬间,它就已经设置好了浏览器的代理了。当你关闭的时候,它又帮你把代理还原了。

当然,Fiddler 不仅能拦截 HTTP ,还能拦截 HTTPS(需要配置)。

Fiddler 可以通过伪造 CA 证书来欺骗浏览器和服务器。Fiddler 是个很会装逼的好东西,大概原理就是在浏览器面前 Fiddler 伪装成一个 HTTPS 服务器,而在真正的 HTTPS 服务器面前 Fiddler 又装成浏览器,从而实现解密HTTPS 数据包的目的。

Fiddler官方网站 提供了大量的帮助文档和视频教程, 是学习Fiddler的最好资料。

本文记录 Android 上使用 Fiddler 的详细配置过程。

注意:默认情况下Fiddler是不能监听Java HttpURLConnection上的HTTP请求的。原因容易理解,Fiddler能监听浏览器的HTTP请求是因为它启动一个代理服务器,浏览器通过这个代理服务器上网,但HttpURLConnection默认不使用该代理。在 Android 上使用了 HttpURLConnection 请求的都不会被抓取(如: Glide 图片库),需要特殊处理(方法见下)。

Fiddler配置

一.普通 https 抓包设置

Fiddler 不做配置,是不能抓取 HTTPS 的。如要抓取 HTTPS,需要安装 CA 证书,步骤如下:

Tools –> Fiddler Options –> HTTPS



勾选Decrypt HTTPS Traffic,点击OK,安装证书(会有弹窗提示)





二.抓取Iphone / Android数据包

Fiddler 抓取移动端设备的数据包,只需要让 移动设备 的数据包 经过 Fiddler 的代理。

所以,Fiddler 抓包,需要 PC 与 手机同在一个局域网内(手机连接 PC 创建的热点,或 手机 PC 连接同一路由器),然后手动更改 手机的网络代理,变更为PC 上 Fiddler 的代理端口地址即可。

详细步骤如下:

打开Fidder,点击菜单栏中的 [Tools] –> [Fiddler Options],点击 [Connections] ,设置代理端口是8888, 勾选 Allow remote computers to connect, 点击OK



如果手机连接 PC 创建的热点,这时在 Fiddler 可以看到自己本机无线网卡的IP了(要是没有的话,重启Fiddler);如果手机与 PC 连接同一路由器,则在 Fiddler 中也可以查看 本机在局域网 IP 地址。(也可以通过在cmd 中 ipconfig 来查看设备的网络连接状况 )


设置Android设备上的代理服务器,使其连接 PC 上的 Fiddler 端口。设置 -> WLAN -> 选择网络 -> 更改代理,将上面查看的 IP 与端口 填写上后,点击确定,然后查看手机能否上网(仅限 http),如果不能上网,则检查 IP 与端口。



在浏览器中访问网页,输入刚刚填写的代理 IP 和 端口,下载 Fiddler 的 CA 证书



安装 CA 证书

设置 -> 系统和备份 -> 更多设置 -> 系统安全 -> 凭据存储 -> 从存储设备安装,选择刚刚下载的 证书,然后会要求输入密码,这个密码是手机的锁屏密码(如果没锁屏密码就去设置一个),输入密码后安装成功,这时候手机可以访问 HTTPS 了。



三.抓取 HttpURLConnection

Android 手机上一些 使用 HttpURLConnection 的数据包想要抓取,还要对 Fiddler 进行如下设置:

Fiddler -> Rules -> CustomizeRules ;

在这个函数OnBeforeResponse 的最后面添加判断

if (oSession.oRequest[“User-Agent”].indexOf(“Android”)> -1 && oSession.HTTPMethodIs(“CONNECT”)) {oSession.oResponse.headers[“Connection”] = “Keep-Alive”; }

这里的” Android”可替换为User-Agent里的其它字符,确保匹配上User-Agent就行



在使用 Glide 时,图片一直不能拿抓包

折腾了半天后,才想起 Glide 有缓存,所以并不会去请求网络~尴尬~

Fiddler使用

简单使用

Fiddler想要抓到数据包,要确保Capture Traffic是开启,在File –> Capture Traffic。开启后再左下角会有显示,当然也可以直接点击左下角的图标来关闭/开启抓包功能。



Fiddler开始工作了,抓到的数据包就会显示在列表里面



下面总结了这些都是什么意思:

名称含义图标含义图标含义
#抓取HTTP Request的顺序,从1开始,以此递增
请求已经发往服务器
响应是脚本格式
ResultHTTP状态码
已从服务器下载响应结果
响应是 CSS 格式
Protocol请求使用的协议,如HTTP/HTTPS/FTP等
请求从断点处暂停
响应是 XML 格式
Host请求地址的主机名
响应从断点处暂停
响应是 JSON 格式
URL请求资源的位置
请求使用 HTTP 的 HEAD 方法,即响应没有内容
响应是一个音频文件
Body该请求的大小
请求使用 HTTP 的 POST 方法
响应是一个视频文件
Caching请求的缓存过期时间或者缓存控制值
请求使用 HTTP 的 CONNECT 方法,使用 HTTPS 协议建立连接隧道
普通响应成功
Content-Type请求响应的类型
响应是 HTML 格式
服务端错误
Process发送此请求的进程:进程ID
响应是一张图片
会话被客户端、Fiddler 或者服务端终止

指定进程

根据需求,选择要捕获的进程



filters信息过滤

Fiters 是过滤请求用的,左边的窗口不断的更新,这个时候通过过滤规则,显示想要看到的请求。



如图所示,只显示 www.baidu.com 的数据

参考

更多 Fiddler 使用,参考如下:

Fiddler 抓包工具总结

fiddler filters 使用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: