为什么你的Charles会抓包失败(一)

发表于:2021-8-11 09:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:卤蛋实验室    来源:网络

分享:
  作为一名 Web 开发工程师,天天都会和网络打交道。Charles 作为一款网络抓包工具,几乎成了 Web 开发的标配。
  本文是我深度使用 Charles 后总结而成,不同于其它介绍 Charles 的文章,这篇文章不会详细介绍 Charles 的各个功能(例如 remote 和 rewrite),而是专注于分析一个问题:什么情况下 Charles 会抓包失败?
  为了解决这个问题,我会从 Charles 的原理分析,并且结合 Android/iOS 的官方政策,一一分析 Charles 抓包中的那些失效问题。看完后如果你觉得有用,一定要记得给我点赞 ??,谢谢你,这对我真的很重要!
  一、Charles 抓包原理
  市面上绝大多数的抓包软件,背后的原理都是中间人攻击(Man-in-the-middle attack,缩写:MITM)。
  维基百科是这样定义 MITM 的:
  中间人攻击在密码学和计算机安全领域中是指攻击者与通讯的两端分别建立独立的联系,并交换其所收到的数据,使通讯的两端认为他们正在通过一个私密的连接与对方直接对话,但事实上整个会话都被攻击者完全控制。
  上面的定义写的很清晰,我结合 Charles 画了一个图,结合箭头方向就能看懂 HTTP Packets 的流向:
MITM
  只看理论有些干,我们可以用个实例看一下 Charles 内部的工作情况。我在电脑浏览器上访问 cdn.staticfile.org 的一个 HTTP 资源,具体的网络报文我用 Wireshark 抓了一下:
  结合 Wireshark 的抓包报文和 Charles 的网络分析,我们可以看出这个 HTTP 请求的报文流向:
  1)浏览器(Client)从端口号 56075 发起一个请求,请求发送到本地 Charles 监听的 8888 端口(MITM Server),这个连接直接在本机进行。
  2)收到浏览器的请求后,Charles 再从端口号 56076 (MITM Client)发起一个新的请求,因为这个网络包要入公网,所以 IP 为 192.168.31.44(我的电脑 IP 地址,下节会介绍); cdn.staticfile.org (Server)的 IP 为 111.63.183.223,因为是 HTTP 请求,所以端口号为 80
  3)111.63.183.223:80 返回一个 HTTP 响应到 Charles 的代理客户端 192.168.31.44:56076
  4)Charles 内部做了一些处理(Capture & Analysis),然后把响应报文通过 8888 端口发送到 127.0.0.1:56075,到这里浏览器就收到了响应。
  在第二步和第三步中,报文经过了 Charles,Charles 这时就可以对报文进行一些加工,例如 Remote 重定向,Rewrite,缓存报文并可视化等操作。
  二、Charles 抓包配置
  为了文章的连续性,这里我会对 Charles 的抓包代理配置进行简单的说明。如果你对这里很熟悉可以选择跳过,不太熟悉可以把文章收藏方便后续检索查阅。
  开始配置前我们先回顾一下基础的网络知识,网络数据如果想从 A 传输到 B,想确定一个连接就必须确定 5 个关键信息:源 IP 地址,源端口,传输层协议,目的 IP 地址和目的端口。这 5 个关键信息又叫五元组,一个五元组就可以确定一个连接。
五元组
  如果用 Charles 抓包,我们就要对照分析一下 Client 和 MITM Server 间代理链接的五元组:
  · 源 IP 地址:被抓包应用的 IP 地址,一般为设备 IP,一般不做修改
  · 源端口:被抓包应用的端口号,一般为操作系统分配,无法修改
  · 传输层协议:Charles 目前主要代理的是 HTTP 协议,一般为 TCP
  · 目的 IP 地址:Charles 的 IP 地址,一般为电脑本机 IP,一般不做修改
  · 目的端口:Charles 的代理端口,默认为 8888,可以修改
  注:上述分析中只考虑了一般情况,如果你真的想改也可以改,但这种 hack 行为不在本文考虑范围内
  从上面的分析我们可以看出,想要打通五元组,我们主要要关注两个点:目的 IP 地址和目的端口。
  我们先分析一下目的 IP 地址。因为 Charles 安装在电脑上,所以 Charles 的 IP 就是电脑的 IP。如果你是 Mac 电脑,可以按住 option 键再用鼠标点击菜单栏的 Wi-Fi 图标,得到电脑 IP 地址。也可以访问 系统偏好设置 -> 网络 得到 IP 地址。这里我的 IP 地址是 192.168.31.44,后面会用到。
  Charles 的代理端口号可以从 Charles -> Proxy -> Proxy Setttings 进行查看和更改。端口默认是 8888,一般不建议修改。
  HTTP 代理配置
  确定好 Charles 的 IP 和端口号后,我们就可以分设备配置 HTTP 代理了。
  1.电脑端 HTTP 代理配置
  无论你使用的是 window 还是 mac,Charles 作为一款在电脑上安装的 APP,代理本机请求时,网络数据都是在本地转发的,所以相对来说电脑端的配置是最简单的。我们只要根据路径 Charles -> Proxy -> macOS Proxy 依次点击开启代理就可。
  因为本机代理默认是关闭的,我们也可以在 Proxy Setttings 中点击 macOS,勾选 Enable macOS proxy on lounch,这样每次打开 Charles 就会默认打开代理了。
  2.iOS 代理配置
  想要抓 iOS 的网络包,只需要把 iOS 的网络包转发到代理 IP 和代理端口就行。
  配置前我们要保证手机和电脑在同一个局域网里(一般手机电脑连同一个 Wi-Fi 就行),然后打开 iOS 的 设置 -> 无线局域网,进入已连接的 Wi-Fi 的设置页面,滑动到最底部选择配置代理,然后手动配置代理。
  服务器要输入的就是前面得到的 Charles IP 地址,案例里是 192.168.31.44;端口是前面的 Charles 代理端口,一般为 8888。
  3.Android 代理配置
  Android 的代理配置其实和 iOS 差不多,但是 Android 厂家众多,操作步骤不像 iOS 那么统一,一一覆盖也没有太大的意义,所以我只做个简单的步骤演示:

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号