什么是抓包
抓包 (Packet Capture), 实际上就是对网络请求 (包括发送与接收) 的数据包进行截获、重发、编辑、转存等操作, 在 Android 下, 也经常被用来进行数据截取等。
学会抓包之后, 获取某个 App 的 API 就是轻而易举的事了, 当然, 现在有很多App, 都对API进行了加密验证, 例如 Hash 校验。所以在这种条件下, 调用人家的API就困难得多了。
在局域网使用 ARP 攻击也可以抓包 Kali Linux ARP 攻击
抓包工具
抓包工具比较常见的是 Fiddler, Wireshark 等, 个人比较喜欢 Charles, 官网, 界面简洁人性化, 只做数据截取的话, 足够用了, 并且同时支持 Windows, Mac, Linux。下面就介绍如何利用 Charles 进行抓包。
去 Charles 的官方网站 (http://www.charlesproxy.com) 下载最新版的 Charles 安装包
Charles 是收费软件, 可以免费试用30天。试用期过后, 未付费的用户仍然可以继续使用, 但是每次使用时间不能超过 30 分钟, 并且启动时将会有 10 秒种的延时。
Charles
Charles 界面如图
主机允许代理模式
菜单栏 Proxy
-> Proxy settings
, Port 设置一个不与电脑其他端口冲突的端口号, 比如 8888, 并勾选 Enable transparent HTTP proxying
, 点击 OK。这样, 就允许了HTTP代理模式。
客户端设置代理
在 Android / iOS 下设置代理
首先, 通过 ipconfig 查看主机 ip 地址 (mac 或 linux 下使用 ifconfig)
然后, Android 或 iOS 须和主机处于同一个局域网下 (连同一个路由器, 同网段)
在 Android 中打开 设置 -> WLAN -> 长按当前连接的 Wi-Fi -> 修改网络 -> 高级选项 -> 打开代理 (手动) -> 输入主机ip 地址及代理端口号 -> 保存
iOS 开启代理的方式也差不多, 进入设置 -> 无线局域网 -> 查看当前连接的 Wi-Fi信息 -> HTTP 设置服务器和端口
截获数据包
前面设置完毕之后, 当 Android / iOS 下, 有进行网络请求时, 那么 Charles 会弹出一个对话框, 确认是否允许代理, 点击 Allow, 表示允许
这个时候, 请求的地址就会出现在左侧的 structure 栏里面, 点击可以查看具体请求的信息
HTTPS
安装 SSL 证书
HTTPS 请求, 响应数据可能会出现乱码, 这时候就需要安装 Charles 的 CA 证书
-
去 http://www.charlesproxy.com/ssl.zip 下载CA证书文件
-
解压该 zip 文件后, 双击其中的 .crt 文件, 这时候在弹出的菜单中选择 总是信任, 如下所示
-
从钥匙串访问中即可看到添加成功的证书。如下所示
当然如果要抓取 iPhone 设备上的 HTTPS 请求, 需要在 iPhone 上也安装一个证书, 在 safari 输入这个网址: http://charlesproxy.com/getssl , 点击安装即可
截取 SSL 信息
Charles 默认并不截取 SSL 的信息, 如果你想对截取某个网站上的所有 SSL 网络请求, 可以在该请求上右击, 选择 SSL proxying
这样, 对于该 Host 的所有 SSL 请求可以被截取到了。用通配符 *
可以监控所有 HTTPS 请求
模拟慢速网络
在做 iPhone 开发的时候, 我们常常需要模拟慢速网络或者高延迟的网络, 以测试在移动网络下, 应用的表现是否正常。Charles 对此需求提供了很好的支持。
在 Charles 的菜单上, 选择 Proxy
-> Throttle Setting
项, 在之后弹出的对话框中, 我们可以勾选上 Enable Throttling
, 并且可以设置 Throttle Preset
的类型。
如果我们只想模拟指定网站的慢速网络, 可以再勾选上图中的 Only for selected hosts
项, 然后在对话框的下半部分设置中增加指定的 hosts 项即可。
修改网络请求内容
有些时候为了调试服务器的接口, 我们需要反复尝试不同参数的网络请求。Charles 可以方便地提供网络请求的修改和重发功能。只需要在以往的网络请求上点击右键, 选择 Edit, 即可创建一个可编辑的网络请求。
我们可以修改该请求的任何信息, 包括 url 地址, 端口, 参数等, 之后点击 Execute
即可发送该修改后的网络请求。Charles 支持我们多次修改和发送该请求, 这对于我们和服务器端调试接口非常方便。
总结
通过 Charles 软件, 我们可以很方便地在日常开发中, 截取和调试网络请求内容, 分析封包协议以及模拟慢速网络。用好 Charles 可以极大的方便我们对于带有网络请求的 App 的开发和调试。
Charles 还有其他挺多功能, 比如 断点, 数据过滤, 重定向等功能, 这里就不一一介绍了~
加密请求
有一些做的比较好的接口, 可能需要对请求参数做一个校验。例如哔哩哔哩的API, 就需要把所有的请求参数, 排序后进行 MD5 加密, 服务端会对加密结果进行校验。但是这方面没有固定的套路, 还需要自己檫亮眼睛去发现加密方式~~
原文