不定期更新。
目录
- 常用抓包工具
- TLS
- CA签名
- 使用
- Wireshark
- Charles
- 问题汇总
- Fiddler
- 面试题
常用抓包工具
Wireshark(最强大)
Charles / Fiddler(图形界面友好)
学习路线:Charles->fiddler->wireshark
TLS
SSL已淘汰。
- TLS(SSL)是什么?
TLS(Transport Layer Security)是用来加密网络通信的协议。
它的前身是 SSL(Secure Sockets Layer),现在几乎都用 TLS,安全性更高。
用浏览器访问 HTTPS 网站、手机 App 请求接口时,为了防止中间被监听、篡改,数据必须加密,这时候就用到 TLS。 - TLS 解决了什么问题?
数据加密:防止数据在传输过程中被窃听
数据完整性:防止数据被篡改
身份验证:确认服务器是“真正的它”,防止中间人伪造 - TLS 工作流程
步骤 1:客户端发起请求(Client Hello)
告诉服务器:“我支持哪些加密算法,咱们来协商一下。”
步骤 2:服务器回应(Server Hello)
服务器说:“我们用这个加密算法,顺便给你我的证书(包含公钥)。”
证书 = 网站身份证,里面包含:域名(example.com)、公钥(用于加密)、签名(由可信的 CA 签名)
步骤 3:协商密钥
客户端生成一个随机数(叫“pre-master key”)
用服务器的公钥加密这个随机数发给服务器
双方根据这个“随机数”生成对称密钥(共享)
从这之后,双方用这个对称密钥加密通信,速度快 + 安全
发的 HTTP 请求(比如登录信息、API 调用),就会经过 TLS 加密成密文,再通过 TCP 发出去。
抓包工具如 Wireshark 抓到的就是这个加密的内容,必须解密(中间人+自签证书)才看得懂。 - HTTPS = HTTP + TLS(是在 HTTP 之上加了 TLS 加密)
CA签名
CA 签名 = 权威机构帮网站发了个“数字身份证”,告诉你:这个网站是可信的,不是假的。
- CA(Certificate Authority)= 证书颁发机构
它是一个大家都信任的“中立第三方”
比如我们熟悉的:
DigiCert
Let’s Encrypt
GlobalSign
它们的任务是:审查网站的身份 + 给出一个“签名”证书
CA 用它的私钥对证书做的加密摘要 - 一个 HTTPS 网站证书长这样:
证书内容(Certificate):
- 域名:example.com
- 公钥:123456...
- 有效期:2025-04-01 到 2026-04-01
- 签名:由 DigiCert 用私钥签的数字签名
可以伪造证书吗?
可以伪造内容,但签名伪造不了(需要 CA 私钥)
- 浏览器如何验证这个签名?
浏览器自带了一堆“CA 公钥”
收到服务器证书后,它会:
用 CA 的公钥验证签名是否匹配
如果匹配成功:说明这个证书是真的,网站可信
这就叫:证书链验证 - 中间人可以拦截 HTTPS 吗?
可以,但如果没有客户端信任他的“CA 签名”,就会显示证书错误(除非你装了他的证书)
使用
Wireshark
偏底层,网络工程师/后端更常用
- 抓 TCP 三次握手 & 四次挥手:
能否通过 Wireshark 抓出 TCP 建立/关闭连接的过程?
是否理解 TCP 流程中的 seq、ack? - 过滤器使用熟练度:
Display Filter 和 Capture Filter 的区别?
举例:如何过滤出某个 IP 的 HTTP 请求?(如:ip.addr == 192.168.1.1 && http
) - 排查请求慢的场景:
是否会通过 Time、RTT、重传等指标,分析请求延迟原因?
- 工作常用技巧
过滤 HTTP 请求:http.request 或 tcp.port == 80
抓包重放流量:右键“Follow TCP Stream”可重现一次完整会话
TLS 握手分析:用于排查 HTTPS 问题,如证书失败、SNI 错误
定位丢包/重传:tcp.analysis.retransmission
Charles
偏前端/APP 常用
- 配置代理
Proxy->Proxy Settings->Proxies->Port填写默认值:8888
- 访问控制
Proxy->Access Control Settings->添加特定的IP且勾选【Prompt to allow unauthorized connections】
勾选【Prompt to allow unauthorized connections】但未配置IP,客户端A发送请求的时候,如果配置代理正确,则charles会弹窗询问是否发送给服务器如下图所示
需要点击按钮【Allow】,则该客户端的ip地址会被添加,下次再访问就不会询问了
勾选【Prompt to allow unauthorized connections】且配置IP,会将客户端的请求转发给服务器;未勾选【Prompt to allow unauthorized connections】,无论是否配置IP都不发送请求到服务器
- 客户端配置代理设置
打开浏览器【使用代理服务器】
地址填写:127.0.0.1(因为charles是安装在本机,故可以写回环地址);如果charles在其他机子上此处就写其他机子的ip地址,端口:8888->保存之后重启charles- mac电脑需要进入设置-网络-到连接的WIFI点击【详细信息】->选择【代理】菜单下的【网页代理】和【安全网页代理】->打开开关,服务器填写代理服务器的IP地址&端口填写8888->保存之后重启charles
如果Charles客户端同MacOS客户端是同一台电脑,则可以使用快捷设置。步骤:菜单栏Proxy->macOsProxy - IOS 设置->无线局域网->找到连接的网络并进入->HTTP代理选择手动后填写服务器和端口->保存
- Android步骤:设置->WLAN->找到连接的网络并进入->选择手动代理配置服务器主机名和端口->保存
- mac电脑需要进入设置-网络-到连接的WIFI点击【详细信息】->选择【代理】菜单下的【网页代理】和【安全网页代理】->打开开关,服务器填写代理服务器的IP地址&端口填写8888->保存之后重启charles
- 如何配置 HTTPS 抓包?
默认下请求会显示< unknown >并且content查看是乱码。- 安装 Charles 根证书并信任(包括移动端)
电脑端整体下载证书的流程:charles的菜单栏help-> SSL Proxying-> Install Charles Root Certificate->剩余步骤看各个客户端的具体步骤- windows证书下载
步骤:会弹窗证书框->点击【安装证书】->存储位置选择【本地计算机】->证书存储选择【将所有的证书都放入下列存储】->选择【受信任的根证书颁发机构】-> 点击确定后会看到导入成功的提示 - MacOS证书下载
步骤:会显示【钥匙串访问】页面->选择对应的charles证书并双击->展开信任,选择始终信任
- windows证书下载
- 安装 Charles 根证书并信任(包括移动端)
手机端整体下载证书的流程:开启charles->手机开启代理->在手机端浏览器输入chls.pro/ssl(快捷方法:将电脑端的证书传到手机上)
IOS证书下载
步骤:进入设置,可以看到已下载描述文件->安装该文件->返回到通用->选择【关于本机】->滑到底部的证书信任设置对charles进行证书信任
- 设置 SSL Proxying
步骤:Charles菜单栏->Proxy->SSL Proxying Setting->SSL Proxying下勾选【Enable SSL Proxying】添加include的location,host写*,端口写443(https的默认端口号)
- 过滤
对网络请求进行过滤,只监控向指定目录服务器上发送的请求。
方法1 左下角有个filter输入框
方法2 在 Charles 的菜单栏选择 “Proxy”->”Recording Settings”,然后选择 Include 栏,选择添加一个项目,然后填入需要监控的协议,主机地址,端口号。这样就可以只截取目标网站的封包了。 - 弱网测试 Throttle 模拟慢网速
点击【Proxy】–>【Throttle Setting】
勾选上【Enable Throttle】,也可以勾选【only for selected host 】 设置一个指定注解访问进行网络限制,不影响其他软件;
在【Throttle preset】选择常见预设的网络情况,也可以在【Bandwidth】自己设置网络的上传和下载速率 - 打断点 篡改数据
选择请求会话右键勾选【Breakpoints】,这是发现对应的断点按钮会变色
设置断点,点击菜单栏【proxy】勾选【Breakoint Setting …】这是会弹出断点设置弹窗;
在弹出的断点设置弹窗,双击想打断点的接口,进行断点编辑;
编辑断点,如果修改Request数据,则Request勾选,如果修改Response数据,就将Response勾选,当然你也可以都勾选;
重新进行请求,Charles 会自动进行拦截并跳转到请求数据修改页面;
- Map Local:本地 JSON/mock 接口替换线上返回
- Repeat & Edit:重复请求并修改参数测试接口行为
在我们的测试工作中,可能你会发先一个bug,开发会让你在操作一遍,他要查看日志经i选哪个定位分析,这时候,在客户端上进行操作一遍就会麻烦,这是直接用Charles 发送一遍重复的请求就可以了,并且,重新发送请求也可以帮助我们进行功能测试;
选择需要重新发送请求的会话上,直接点击工具栏【重新按钮】
Compose编辑接口:在我们的测试工作中,可能需要发送不同的参数进行请求。选择需要修改的请求,右键选择【Compose】这时多出一个新的请求;
- Proxy 移动端:配置手机和 Charles 在同一网络,设置代理抓 APP 包 前后已经讲过了 这里不再赘述
- 服务器压力测试
Charles 还有一个比较有意思的功能,它能勾简单的给服务器进行压力测试;在进行压力测试的请求会话上右击,选择【Repeat Advanced】,在弹出框中,输入并发线程数以及压力次数点击进行测试
问题汇总
- 手机连接代理后输入chls.pro/ssl无法下载证书
解决:重启charles再次输入chls.pro/ssl - 手机安装和信任证书后,无法上网抓接口
解决:手机关掉代理并重新配置代理,如还不能解决则重启charles - 电脑端已有证书,突然不能抓包
解决:
步骤1: 点击help-> SSL Proxying-> Install Charles Root Certificate查看证书有效期是否已过
步骤2: 如有效期已过,则点击Reset Charles Root Certificate重置证书
步骤3: 重新安装证书
- app抓包
【Help】–>【local IP Address】获取下ip地址,也可以直接通过电脑自带的CMD命令来获取电脑IP【ipconfig】
点击安装【Install Charles Root Certificate On a Mobile Device or Remote Browser】在移动设备上或远程浏览器安装证书即可;(这里和上面安装一样)
Fiddler
偏 Windows 系统上常用,功能和 Charles 类似
- 如何通过 Fiddler 抓 HTTPS?
安装 Fiddler 证书,勾选 Decrypt HTTPS Traffic - 如何过滤指定 URL?
使用 Fiddler Script 设置自动断点或自动响应规则 - 支持自定义断点调试吗?
使用 AutoResponder 和 Breakpoints 模拟接口行为
- 工作常用技巧
AutoResponder 模拟接口返回
Composer 造请求测试接口
手机代理抓包
Filter 过滤特定域名或路径的请求
面试题
- HTTPS 是什么?为什么抓不到?
HTTPS = HTTP + TLS(SSL)
也就是说,请求的数据(包括请求头、请求体)都会经过加密,再通过 TCP 发出。
所以如果你用 Wireshark 抓包,只能看到加密后的二进制数据,看不懂。 - 如果让你抓 HTTPS 的包,你怎么抓?
- 要抓 HTTPS 明文内容,必须满足两个条件:
抓包工具能够“拦截”并“解密”HTTPS 数据
客户端必须“信任”这个抓包工具的证书(CA 证书) - 抓 HTTPS 包的关键:抓到加密前的数据(解密)
方法:
使用 Charles / Fiddler 安装自签证书,客户端信任这个中间人证书,就能抓到明文。
在服务器或客户端打日志(hook HTTPS 请求)
使用 mitmproxy 模拟中间人 - 具体操作
步骤 1:安装抓包工具的根证书(Root Certificate)
工具会生成一个“自签名证书”作为 CA(Certificate Authority)(自签名证书:不是由官方机构签发的,而是 Charles/Fiddler 自己生成的)
你把这个证书装到系统/手机里并“信任”
客户端(浏览器或 APP)就会信任这个“假服务器”
步骤 2:抓包工具启用 TLS 解密(如 Charles 的 SSL Proxying)
启用解密功能后,它就会自动给每个请求生成一个假的服务器证书
然后可以解密请求和响应,显示明文内容
步骤 3:客户端请求被抓包工具劫持并解密
你就能在 Charles 或 Fiddler 里看到:
URL
请求头(Headers)
请求体(Body)比如 JSON 数据
响应头 + 响应体(服务器返回的内容)
SSL Proxying:Charles 中用于拦截并解密 HTTPS 流量的功能
TLS 握手(Handshake):客户端与服务器协商加密算法、密钥的过程
- 抓到 HTTPS 包了,怎么获得里面所有信息?(明文)
抓包工具安装 CA 证书(如 Charles 安装根证书)
客户端信任该证书
工具才能拦截并解密 TLS 流量,看到请求头、体、响应等 - 正常 HTTPS 通信流程(简化版):
客户端和服务器通过 TLS 握手,协商密钥
客户端发送请求(加密)
服务器返回响应(加密) - 中间人攻击(Man-in-the-Middle, MITM) 模拟
抓包工具(如 Charles/Fiddler)做的事情是:
它假装自己是“服务器”,跟客户端握手
它再和真正服务器握手,建立自己的安全通道
中间这个代理,拿到了加密前的数据,就能看到明文了 - HTTPS 抓包失败可能的原因有哪些?
没安装证书
没启用 SSL Proxy
客户端做了证书校验(如 App Pinning)
iOS/macOS 不信任自签 CA(需手动设为“始终信任”) - 抓不了小程序的 HTTPS 怎么办?
小程序/APP 有“证书锁定”(证书钉扎)
只能通过“hook”方法抓包,比如使用 Xposed + SSLUnpinning