想看看某个脚本到底发了什么请求,老办法是这样的:改系统代理、给它装证书、抓完再还原回去——如果这一套只是为一个临时脚本服务,折腾成本比要查的事还大。其实还有另一种路数,一条命令的事:
# 在「启动命令」里填上要运行的程序,工具负责把它拉起来、只抓它
python3 fetch_data.py
工具把这条命令跑起来,只抓这一个程序的流量:不改系统代理、不装证书,启动就能看到 HTTPS 明文。这篇把这种"指定程序抓包"讲清楚——它和传统代理抓包差在哪、几个现成的示例怎么用、哪些程序有例外要提前知道。
一、差的不是工具,是能力范围
代理抓包动的是整台机器:系统代理要改,证书要装,程序还得信任它;抓完一整套要还原,中间万一波及别的软件,还得挨个排查。指定程序抓包只动这一个程序:不动系统设置、不装证书、停掉即结束,没有任何收尾工作。
还有个直观的差别是列表里的噪声。全局代理开着抓一个脚本,浏览器、后台应用、系统服务全都涌进列表——想看的没几条,不相干的几百条;指定程序抓包的列表里只有它一个,查什么就是什么。
"明文什么时候来"也不一样:代理方式要程序认了证书才看得到明文;这种方式是启动即明文——浏览器、Electron 应用、Node、Python、桌面 Java,还有用通用加密库的命令行工具,拉起来直接看,不用给程序配任何东西。
顺手提一句子进程的处理:程序内部再拉起的子进程,也会一并被抓到。写脚本的人会懂这个设计的价值——主进程调个 CLI、脚本里 fork 个子进程发请求,不会漏。这类场景其实很常见:验证一个 SDK 的请求签名逻辑,把它的 demo 程序跑起来抓一遍,比翻半天文档快得多。
二、三个现成示例,覆盖日常三种姿势
TraceEagle 里内置了三个一键示例,点了自动填好、还能改:
浏览器示例。 拉起一个独立、干净的新窗口——不影响你日常在用的那个浏览器(插件、标签页的噪声都不掺进来),而且已经帮你把 HTTP/3 回退成普通连接,好抓、能解。排查"某个网页的请求到底长什么样"最顺手。
Python 示例。 一条命令发个请求,明文直接出来——requests、aiohttp 这些常见库发的请求都能看。调脚本、验接口的日常主力。示例填好之后照样能改,换成你自己的脚本名就行。
命令行示例。 命令行工具发的 HTTPS 请求即抓——用 curl、wget 之类做接口验证时,能直接看到请求和响应。
三个示例覆盖了"浏览器、脚本、命令行"这三类最常见的单程序场景,第一次用的话,从示例起步就挺好,不用自己从零想命令。
三、几个边界,提前知道少走弯路
这套方式覆盖面广,但有几类程序要提前打个招呼:
macOS 系统自带的 curl 拿不到明文。 能抓到流量,但只有密文——它用的是系统那套加密库,这个方式解不了。想用命令行看明文,用 Python 示例最稳,或者换成 OpenSSL 版的 curl。部分纯 Go 编写的程序,也属于这类例外呢。
完全不认代理设置的程序抓不到。 这类程序得换"应用层抓包"那条路——从程序内部直接取明文,证书绑定、自研加密这些也能拿下(那是另一篇的话题)。
把这些边界说在前头,是因为它们属于"方式本身的适用面"问题,不是工具坏了——碰上时换路子,比反复重试省时间。
四、它在本机四种抓法里的位置
本机的抓包方式其实有四种,分工挺清楚:
- 能用命令启动的常规程序(浏览器、脚本、CLI)→ 指定程序抓包(就是本篇),最省事;
- 想看整机全部流量、非 HTTP 流量、某个程序的完整网络行为 → 网卡抓包;
- 程序已经在运行、或证书绑定、不认代理、自研加密 → 应用层抓包;
- macOS 系统自带的 App、顽固应用 → 系统级抓包。
和 Charles、Fiddler 这些经典代理工具对比着看,差异在粒度:它们的工作方式是"改整机的代理设置",抓的是全局;指定程序抓包是"只圈一个进程"。两种粒度不冲突——日常调一个脚本用后者,要纵观整机网络行为时前者或网卡抓包更合适。
五、几个常问的
需要装证书吗? 不用。这是它和代理抓包在操作上最大的差异——启动即明文,装证书那一步整个省掉。
会影响我在用的浏览器和别的软件吗? 不会。系统设置一点没动,浏览器示例拉的是独立窗口,日常那个该干嘛干嘛。
抓完要还原什么吗? 不用还原任何东西,停掉就行——没有代理设置和证书留在系统里,这也是它"随手即用"的原因:调一个脚本、验一个接口,填条命令就开抓,用完就走嘛。对频繁调脚本的人来说,省下的不只是操作步骤,还有"改了系统设置怕忘还原"的那点心理负担。
在 TraceEagle 里,这个方式的入口就在新建会话的「启动命令」里——填命令、启动、看明文,三步;抓到的数据和其它抓法走同一套查看与解码流程,自动解压、格式识别、私有协议解码都是现成的。
顺带说一句,"抓单个程序的流量"这个需求,多数人的第一反应还是去翻代理设置——其实换个入口,事情能简单一个量级啊。下次调脚本的时候,不妨试试把命令直接填进抓包工具的启动框里,体验一次"零配置看明文"吧。