在开发过程中,我们经常会碰到需要抓取网络接口请求数据来进行调试或者接口对接的情况,有时候某些金融行业的前端或者APP过检也会对APP进行抓包分析,所以在这里简单做一下整理,方便日后复习。
一、常用的抓包工具
抓包工具有很多,小到最常用的web调试工具Firebug,达到通用的强大的抓包工具Wireshark。为什么使用 Fiddler?原因如下:
(1) Firebug虽然可以抓包,但是对于分析http请求的详细信息,不够强大。模拟http请求的功能也不够,且 Firebug 常常是需要“无刷新修改”,如果刷新了页面,所有的修改都不会保存。
(2) Wireshark是通用的抓包工具,但是比较庞大,对于只需要抓取http请求的应用来说,似乎有些大材小用。
(3) Httpwatch 也是比较常用的http抓包工具,但是只支持IE和 firefox浏览器(其他浏览器可能会有相应的插件),对于想要调试chrome浏览器的http请求,似乎稍显无力。
(4) Fiddler 是一个使用本地 127.0.0.1:8888 的 HTTP 代理,任何能够设置 HTTP 代理为 127.0.0.1:8888 的浏览器和应用程序都可以使用 Fiddler,Fiddler 可以将网络传输发送与接受的数据包进行截获、重发、编辑、转存等操作。
二、Fiddler抓包工具的使用
(1)原理
Fiddler是位于客户端和服务器端的HTTP代理,也是目前最常用的http抓包工具之一 。 它能够记录客户端和服务器之间的所有 HTTP请求,可以针对特定的HTTP请求,分析请求数据、设置断点、调试web应用、修改请求的数据,甚至可以修改服务器返回的数据,功能非常强大,是web调试的利器。
既然是代理,也就是说:客户端的所有请求都要先经过Fiddler,然后转发到相应的服务器,反之,服务器端的所有响应,也都会先经过Fiddler然后发送到客户端,基于这个原因,Fiddler支持所有可以设置http代理为127.0.0.1:8888的浏览器和应用程序。使用了Fiddler之后,web客户端和服务器的请求如下所示:
Fiddler 作为系统代理,当启用 Fiddler 时,IE 的PROXY 设定会变成 127.0.0.1:8888,因此如果你的浏览器在开启fiddler之后没有设置相应的代理,则fiddler是无法捕获到HTTP请求的。
下面再看下Fiddler 是怎么抓取移动端设备的数据包的,先来说说移动设备怎么去访问网络,看了下面这张图:
可以看得出,移动端的数据包,都是要走wifi出去,所以我们可以把自己的电脑开启热点,将手机连上电脑,Fiddler开启代理后,让这些数据通过Fiddler,Fiddler就可以抓到这些包,然后发给路由器(如图):
(2)使用方法
先贴下载地址:
不过这个貌似只有30天试用期,需要的可以自己找找破解版,我是用联想电脑管家上面的软件商店直接装的,好像没这个问题。
先看一下 Fiddler 抓取到的数据包:
解释一下这些圈红的地方什么意思:
名称 | 含义 |
---|---|
# | 抓取HTTP Request的顺序,从1开始,以此递增 |
Result | HTTP状态码 |
Protocol | 请求使用的协议,如HTTP/HTTPS/FTP等 |
Host | 请求地址的主机名 |
URL | 请求资源的位置 |
Body | 该请求的大小 |
Caching | 请求的缓存过期时间或者缓存控制值 |
Content-Type | 请求响应的类型 |
Process | 发送此请求的进程:进程ID |
Comments | 允许用户为此回话添加备注 |
Custom | 允许用户设置自定义值 |
图标 | 含义 |
| 请求已经发往服务器 |
| 已从服务器下载响应结果 |
| 请求从断点处暂停 |
| 响应从断点处暂停 |
| 请求使用 HTTP 的 HEAD 方法,即响应没有内容(Body) |
| 请求使用 HTTP 的 POST 方法 |
| 请求使用 HTTP 的 CONNECT 方法,使用 HTTPS 协议建立连接隧道 |
| 响应是 HTML 格式 |
| 响应是一张图片 |
| 响应是脚本格式 |
| 响应是 CSS 格式 |
| 响应是 XML 格式 |
| 响应是 JSON 格式 |
| 响应是一个音频文件 |
| 响应是一个视频文件 |
| 响应是一个 SilverLight |
| 响应是一个 FLASH |
| 响应是一个字体 |
| 普通响应成功 |
| 响应是 HTTP/300、301、302、303 或 307 重定向 |
| 响应是 HTTP/304(无变更):使用缓存文件 |
| 响应需要客户端证书验证 |
| 服务端错误 |
| 会话被客户端、Fiddler 或者服务端终止 |
再看一下右侧工具栏我们常用的几个地方:
这里面,我使用最多的就是 Inspectors 和 Fiters 了,关于 Fiters 啰嗦两句:
勾选左上角的Use Filters开启过滤器,这里有两个最常用的过滤条件:Zone和Host
1、Zone 指定只显示内网(Intranet)或互联网(Internet)的内容:
2、Host 指定显示某个域名下的会话:
如果框框为黄色(如图),表示修改未生效,点击红圈里的文字即可
修改完后可以点击右上角的 Actions ,里面有个立即生效
(3)遇到的问题
a. Android 高版本手机抓包 报SSLHandshakeException异常问题
使用Fiddler抓HTTP/HTTPS包,Android7.0以后https抓包失败问题
原因:在Android 6.0 (API level 23)及以前,APP默认信任系统自带的CA证书以及用于导入的CA证书,Android 6.0 (API level 23)以后,APP默认只信任系统自带的CA证书,对于用户导入的不予理会。Google也给出了办法,怎么在Android7.0及以后的系统中,让APP信任我们手工导入的CA证书。方案如下:
解决方案:
在编译APK之前,在你的Android项目的res文件夹下创建xml文件 [net_security_config.xml] 内容为:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config xmlns:android="http://schemas.android.com/apk/res/android">
<base-config cleartextTrafficPermitted="true">
<trust-anchors>
<certificates src="system" overridePins="true" />
<certificates src="user" overridePins="true" />
</trust-anchors>
</base-config>
</network-security-config>
然后在AndroidManifest.xml中的application标签下添加
android:networkSecurityConfig="@xml/net_security_config.xml"
编译安装,然后该APP就信任用户添加的CA证书,从而Fiddler就可以抓到它的HTTPS包并解密内容。
三、Wireshark抓包工具的使用
暂时还没详细学习,后续补充