linux下Claude抓包
最直接、最优雅的路径(非抓包):如果你只是想知道 Claude 收到了什么、回复了什么,官方 CLI 自带--debug基本够用。但在 Windows 上,你大概率需要配合cc-viewer工具来达到类似效果。抓包的必要性:如果你想知道 Claude Code 具体调用了哪个函数、传了什么参数,或者它在调用工具中间出了什么差错,只能用抓包来“看现场”。这需要你克服安装和配置代理的心理门槛。了解 C
好的,没问题。下面是一份更详细的版本,我把每一步的操作、底层原理、以及我自己踩过的坑都拆开来讲,希望能帮你一次性搞懂背后的门道。
抓包抓到了什么:一次抓包数据的结构分析
我们先来看一次完整抓包的核心数据,这样看后面不蒙圈。抓包通常会捕获到发给 api.anthropic.com 的 POST /v1/messages 请求,其请求体一般长这样:
📦 请求体主要构成
system数组:这部分实际展开后内容巨大,包含系统指令、技能列表、CLAUDE.md 项目规则和渐进式披露技巧等。messages数组:用于管理对话轮次。你的第一次提问在 role: “user” 中;而当 Claude 需要执行工具时,会发出一个 role: “assistant” 的工具调用指令(type: “tool_use”);你执行完工具后,需要把结果作为 role: “user” 的消息再发回去(type: “tool_result”),从而完成一次闭环。tools数组:这是 Claude 可以调用的全部外部功能。光是内置工具就有 26 个,明确归类在 8 个分组里。整个tools定义的纯文本大小能达到 96.6 KB,可见其内容之详细。anthropic_version&beta标记:用于告诉服务器使用特定的 API 版本,或启用还在测试中的能力。
看到这里,大家应该明白为什么一个简单查询背后会有如此庞大的数据量了。下面我们来逐个拆解四种实现方法。
| 序号 | 方法名称 | 难度 | 完整性 | 适用场景 |
|---|---|---|---|---|
| 1 | 调试日志 | 低 | 高 | 快速排查问题,本地开发首选 |
| 2 | CC-Viewer | 低 | 高 | 想要可视化界面的非抓包方案 |
| 3 | Mitmproxy | 中 | 最高 | 深度分析、确认工具调用细节、修改请求 |
| 4 | SDK 拦截 | 中 | 高 | 自主开发 AI Agent 时的集成测试 |
一、内置日志:官方 Cli 自带调试模式
这是最简单、官方支持的方法,只需在命令后加 --debug 即可,例如:
claude --debug "把当前目录下所有 CSS 文件合并成一个"
这个命令的原理是:--debug 参数被 Claude Code 的 CLI 解析后,会设置一个内部环境变量。当 CLI 调用 Anthropic SDK 发起网络请求时,SDK 检测到这个变量就会自动在 stderr 中打印出发送和接收的原始数据包。整个过程无需任何第三方工具。
🚧 可能遇到的问题及排查
就像我前面提到的,这个命令在某些版本的 Windows 或特定环境下可能失效。建议按照以下流程排查:
- 检查安装:确保 Claude Code 是最新版,如果是 Windows 建议优先在 WSL 的 Ubuntu 环境中使用。
- 检查日志路径:如果
--debug在终端没输出,日志可能已经写入内部文件了,可以尝试查看%USERPROFILE%\.claude\下的.jsonl文件。 - 启用详细日志:一些旧版本可能需要配合
--verbose参数使用。
二、CC-Viewer:命令行开始,网页内查看
如果你不想被终端的原始数据淹没,希望有一个美观的界面,可以用 cc-viewer。这个方法不影响你正常使用claude命令,非常方便。
安装与基础使用
- 首先通过 NPM 全局安装:
npm install -g cc-viewer。 - 安装后,直接在终端启动它:
ccviewer。这一步要求机器上已安装并配置好 Claude Code。 - 启动成功后,浏览器会自动打开一个新标签页(通常是
http://localhost:3314/),展示 Claude Code 的所有历史会话记录。
它的内部原理其实是个本地 Web 服务器,启动后会扫描 Claude Code 在电脑上存储的会话文件,然后在它的界面上进行渲染展示。这就让你能优雅地回溯 Claude 之前所有工具调用和系统提示词。
三、Mitmproxy 抓包:看得最全的方案
Mitmproxy 是一个与平台无关的,纯命令行界面的抓包工具。
1. 技术原理:一个“合法”的中间人
HTTPS 是加密的,Mitmproxy 能做“中间人”的核心在于它替换了证书。当你信任了 Mitmproxy 自己生成的根证书后,它会为你访问的任意网站(如 api.anthropic.com)动态生成一个由它根证书签名的假证书。你的电脑认为这个假证书是合法的,所以连接成功。
这样一来,你和服务器之间的所有数据都会先经过 Mitmproxy,它在本地解密后,你就能看到明文了。然后它会用真实的 Anthropic 服务器证书(它自己的)再把数据加密发出去。你和服务器都以为在和对方直接通信,其实中间站了个“第三者”。
2. 完整操作步骤(以 Mac/Linux WSL 为例):
- 第一步,安装与启动代理:
brew install mitmproxy安装。之后,通过mitmweb --listen-port 8080启动,这会打开一个浏览器监控面板http://localhost:8081。 - 第二步,配置 Claude Code 并安装证书:打开一个新终端,配置让它走代理:
export HTTPS_PROXY=http://localhost:8080 export NODE_EXTRA_CA_CERTS=~/.mitmproxy/mitmproxy-ca-cert.pem claude - 第三步,开始对话并查看:进入 Claude 会话后发送一个指令,比如 /
请重构 utils.js。马上切回mitmweb界面,应该就能看到刚捕获的POST /v1/messages请求了。
3. 注意
这 NODE_EXTRA_CA_CERTS 环境变量是很多人配置失败的地方。Node.js 环境下的程序(如 Claude Code)不会自动使用操作系统的根证书。如果你不加这个配置指向 Mitmproxy 的证书,Node.js 的 TLS 层会发现证书不匹配,从而拒绝连接,Claude 会直接没反应。
四、SDK 直接调用者的请求拦截
这种方法比较定制,需要你直接编辑 Claude 的 CLI 核心文件 cli.js 来注入日志代码。
能找到这条路,本身就是通过对 cli.js 进行逆向工程的结果。当你在代码(如 Python)里使用 Anthropic SDK 时,如果不想--debug日志混在 stdout 里,可以这样操作:
import anthropic
import logging
# 启用库的 debug 日志
logging.basicConfig(level=logging.DEBUG)
logging.getLogger("anthropic").setLevel(logging.DEBUG)
client = anthropic.Anthropic()
# 你的正常调用代码
message = client.messages.create(...)
对于自己开发的 AI Agent,这样能精确控制日志输出格式,方便集成到自动化监控系统。
总结一下这四种方法
- 最直接、最优雅的路径(非抓包):如果你只是想知道 Claude 收到了什么、回复了什么,官方 CLI 自带
--debug基本够用。但在 Windows 上,你大概率需要配合cc-viewer工具来达到类似效果。 - 抓包的必要性:如果你想知道 Claude Code 具体调用了哪个函数、传了什么参数,或者它在调用工具中间出了什么差错,只能用抓包来“看现场”。这需要你克服安装和配置代理的心理门槛。
写在最后
了解 Claude 的底层通信,是在为构建 AI Agent 核心机制铺路。这四种方法的每种选择,本质上都代表了不同的 “Agent-to-Cloud” 控制策略。当你能根据自己的需求(开发成本 vs. 观察深度)选择合适的工具时,你围绕 Agent 构建的工具链也就逐步成型了。
更多推荐



所有评论(0)