PulseHttps:零侵入的被动HTTPS抓包Web工具

发布时间:2026/9/26 12:55:03

PulseHttps:零侵入的被动HTTPS抓包Web工具 文章目录一、项目简介解决什么问题二、技术栈三、核心功能1. 一键启动实时会话流2. HTTP/1.1增量解析 自动配对3. HTTP/2完整还原不是只能看 hex4. 响应体自动解压5. 服务端视角同样可抓6. 安全与自动化四、项目结构五、环境与依赖六、安装教程1. 安装 eCapture2. 构建 PulseHttps3. 运行4. systemd 常驻可选七、使用教程界面操作关键配置项REST API自动化场景运行效果八、已知限制九、写在最后在服务器上调试 HTTPS 请求传统方案要么改应用走代理要么部署 CA 证书做中间人。PulseHttps 换了一条路用 eBPF uprobe 直接 hook OpenSSL 的SSL_read/SSL_write在加密发生之前就把明文拿到手。无需证书、无需代理、无需修改任何应用浏览器里就能看到 Fiddler 风格的会话列表。以下文档和实现代码均使用Claude Code 火山引擎的GLM-5.3 编写。一、项目简介解决什么问题做后端开发/运维的同学对下面这些场景应该不陌生一台 Linux 服务器上跑着某个第三方程序甚至是个黑盒二进制它持续调用外部 HTTPS 接口你想知道它到底发了什么、对方回了什么——但你改不了它的代码甚至改不了它的配置nginx 作为服务端接收大量 HTTPS 入站请求想现场确认客户端到底发上来什么总不能抓个 pcap 回来慢慢解密生产/内网环境没有桌面装不了 Fiddler/Charles就算装了代理型工具要求应用把流量交给你容器里的进程可未必听你的。这类问题的共同痛点是代理方案要求应用配合中间人方案要求信任你的证书而在服务器场景里这两条路经常都走不通。PulseHttps 就是为这个场景做的一个类似 Fiddler 的 HTTPS 抓包Web工具跑在 Linux 服务器上通过集成 eCapture基于 eBPF/uprobe直接 hook OpenSSL 等 TLS 库以非代理方式获取本机所有 HTTPS 请求/响应明文然后在浏览器里实时查看┌──────────────── Linux 服务器root────────────────┐ │ │ │ 浏览器 ◄── HTTP/WS ──► PulseHttpsgin, :3000 │ │ ├─ REST /api/* /ws 推送 │ │ ├─ 会话存储内存环形缓冲 │ │ ├─ HTTP/1.1 流解析 配对 │ │ └─ ecapture 子进程管理 │ │ │ --ecaptureq │ │ ecapture tls官方二进制 │ │ │ eBPF uprobe │ │ libssl明文 hook 点 │ └─────────────────────────────────────────────────────┘原理一句话讲清HTTPS 的加密发生在 TLS 库内部应用调用SSL_write(明文)之后数据才被加密、SSL_read返回之前数据已被解密。eBPF uprobe 恰好能挂在这两个函数的出入口上所以拿到的天然就是明文——既不用伪装服务器不需要证书也不用截流量不需要代理。二、技术栈选型原则就一条够简单、可单文件部署。层技术说明抓包核心eCaptureeBPF/uprobe官方二进制作为子进程托管通过其ecaptureq协议WebSocket protobuf接收事件后端Go ginREST API 静态资源服务实时推送gorilla/websocket会话 100ms 合并推送同时是 ecaptureq 的 WS 客户端协议解析自研 golang.org/x/net/http2/hpackHTTP/1.1 增量解析器、HTTP/2 帧扫描器、HPACK 上下文管理前端Bootstrap 4.6 jQuery 3.5 highlight.js全部 CDN 引入原生 ES Modules无任何构建工具没有 webpack/vite/npm存储纯内存环形缓冲会话对象原地更新超限淘汰最旧不落盘部署go:embed前端静态资源内嵌进二进制单文件、任意目录运行一个值得说的取舍前端刻意保持零构建。抓包工具的受众是运维/SREclone 下来go build一下就能用不希望引入 node_modules 的心智负担。三、核心功能1. 一键启动实时会话流页面上点「启动抓包」工具拉起ecapture tls --ecaptureq ws://127.0.0.1:随机端口/之后所有被捕获的 HTTPS 流量以会话Session形式实时滚动时间、进程PID、方法、Host、路径、状态码、大小、耗时一应俱全顶部支持关键字/方法/状态码/阶段过滤。点击行进入详情页概要/请求/响应/原始数据四个页签JSON/HTML 语法高亮、图片直接预览、二进制 hex 展示。2. HTTP/1.1增量解析 自动配对数据源是零散的SSL_read/SSL_write明文事件工具按PIDFD跟踪每条连接增量喂给 HTTP/1.1 解析器方向自动识别根据首字节特征判断 READ 方向是请求服务端进程如 nginx还是响应客户端进程如 curl完整支持 Content-Length / chunked / until-close 三种 body 定界1xx 临时响应、101 协议升级、截断流都有对应处理同一连接上的请求/响应按 FIFO 配对成会话连接空闲超时自动终结规避 fd 复用导致的串流。3. HTTP/2完整还原不是只能看 hex这是整个项目里投入最大的一块也是和简单抓包脚本拉开差距的地方每条 h2流还原为一条独立会话方法/Host/路径/状态码/请求响应体与 HTTP/1.1 会话同等展示HPACK 动态表按方向独立维护复用x/net/http2/hpack.Decoder支持 CONTINUATION 跨帧头块、trailers、服务端推送PUSH_PROMISE 生成独立会话、RST_STREAM/GOAWAY 终结标注双向失步时自动降级为原始数据会话保证任何流量都可见。实测 86KB 的页面响应多帧、含 HPACK 动态表可以零字节差异还原。4. 响应体自动解压gzip/deflate/brotli 全部自动解压展示超限截断但保留真实大小统计。5. 服务端视角同样可抓nginx 等服务端的入站请求也逃不过READ 方向是客户端请求、WRITE 方向是响应HTTP/1.1 与 HTTP/2 均支持。这是代理型工具只能看客户端出站流量做不到的。6. 安全与自动化简单 Token 认证Bearer/查询参数/Cookie因为页面展示的是明文含 cookie、鉴权头生产环境务必设置完整的 REST API/api/status、/api/capture/start|stop、/api/sessions等便于二次开发或接入监控。四、项目结构PulseHttps/ ├── main.go # 入口配置加载、组件装配、信号处理 ├── config/config.go # YAML 配置定义与默认值 ├── internal/ │ ├── pb/ # ecaptureq 的 protobuf 定义拷贝自 eCapture v2.5.2 │ ├── ecapture/ # ecapture 子进程管理 WS 客户端 事件文本解析 │ │ ├── manager.go # 托管模式拉起/重启进程或 attach_url 附加模式 │ │ ├── client.go # gorilla WS 客户端protobuf 解码、45s 读超时、退避重连 │ │ └── eventparse.go # 事件文本解析READ/WRITE、ConnDataEvent 四元组 │ ├── capture/ # 核心明文字节流 → 结构化会话 │ │ ├── assembler.go # 按 PIDFD 跟踪连接、配对、空闲终结、四元组补全 │ │ ├── http1.go # HTTP/1.1 增量解析器 │ │ ├── h2frame.go # HTTP/2 帧扫描器含失步判定与重同步 │ │ ├── h2hpack.go # HPACK 上下文每方向独立失败永久降级 │ │ ├── h2.go # H2 流状态机流 ID → 会话映射 │ │ └── decode.go # gzip/deflate/brotli 解压 │ ├── store/ # 内存环形缓冲 过滤查询 │ └── web/ # gin 路由、REST API、/ws 推送、Token 中间件 ├── web/ # 前端index.html 原生 ES Modules ├── cmd/mockecapture/ # ecaptureq 协议模拟器无 Linux 环境时本地联调 ├── configs/ # 配置示例含 mock 联调配置 └── bin/ # WSL 部署/验证脚本分层职责清晰ecapture负责拿到字节capture负责字节变会话store负责存与查web负责看。事件从 libssl 到浏览器全程不落盘。五、环境与依赖运行环境Linux 服务器Linux内核 x86_64 ≥ 4.18 / arm64 ≥ 5.5eBPF uprobe 的硬性要求root 权限或CAP_BPFCAP_PERFMONcapability内核启用 BTFCONFIG_DEBUG_INFO_BTFy检查/sys/kernel/btf/vmlinux是否存在主流发行版默认开启被监控进程使用 OpenSSL/BoringSSL 系 TLS 库——nginx、curl、Python(requests)、Node 等都适用已安装 eCapture ≥ v2.5.0需支持--ecaptureq参数。构建环境Go ≥ 1.21 即可支持在 Windows/macOS 上交叉编译 Linux 二进制CGO_ENABLED0。两点提前说明避免踩坑Go 程序自身的 TLS 不经过 libsslGo 用自己的 crypto/tls抓不到——需要 eCapture 的 gotls 模块PulseHttps 暂未适配纯明文 HTTP 不在支持范围内本工具定位就是 HTTPS 监控。六、安装教程1. 安装 eCapture从 eCapture Releases 下载对应架构版本# 示例版本号以 releases 页面为准wgethttps://github.com/gojue/ecapture/releases/download/v2.5.2/ecapture-v2.5.2-linux-amd64.tar.gztar-xzfecapture-v2.5.2-linux-amd64.tar.gzsudomvecapture-v2.5.2-linux-amd64/ecapture /usr/local/bin/sudochmodx /usr/local/bin/ecapture验证sudo ecapture --help输出里能看到--ecaptureq参数即可。2. 构建 PulseHttps在 Linux 上gitclone仓库地址cdPulseHttpsCGO_ENABLED0go build-oPulseHttps.在 Windows 上交叉编译同样一行仓库附带的build.cmd双击即用CGO_ENABLED0GOOSlinuxGOARCHamd64 go build-obin/PulseHttps-linux-amd64.构建产物是单个静态二进制前端资源已内嵌scp 到任意 Linux 目录即可运行。3. 运行# 最简不写配置文件内置默认值监听 0.0.0.0:3000sudo./PulseHttps# 推荐复制示例配置至少设置 tokencpconfigs/config.yaml my.yamlvimy.yamlsudo./PulseHttps-cmy.yaml浏览器打开http://服务器IP:3000点击「启动抓包」——这时在服务器上随便curl https://www.example.com会话几秒内就会出现在列表里。务必设置 token页面展示的是 HTTPS 明文含 cookie、鉴权头等敏感信息token 留空等于把整台机器的流量明文挂在公网上。4. systemd 常驻可选# /etc/systemd/system/pulsehttps.service [Unit] DescriptionPulseHttps HTTPS monitor Afternetwork.target [Service] ExecStart/opt/pulsehttps/PulseHttps -c /opt/pulsehttps/config.yaml Restarton-failure # eBPF 需要 root如需降权可改用 CapabilityBoundingSetCAP_BPF CAP_PERFMON CAP_SYS_RESOURCE [Install] WantedBymulti-user.target七、使用教程界面操作启动抓包首页点击按钮即可。进阶参数可选仅抓指定 PID、指定 libssl.so 路径、每 CPU 缓冲大小、透传额外参数如--ssl_version openssl 3.0.2用于 OpenSSL 版本探测失败的场景。会话列表实时滚动支持关键字/方法/状态码/阶段过滤「丢弃」计数表示事件队列溢出高流量下可调大mapsize。详情查看四个页签——概要时间线/四元组、请求头体、响应自动解压后的 body、原始数据hex。关键配置项listen:0.0.0.0:3000# Web 监听地址token:your-secret# 访问令牌生产必设ecapture:bin:ecapture# ecapture 路径默认 PATH 查找pid:0# 仅抓指定进程0 全部libssl:# 指定 libssl 路径留空自动探测mapsize:1024# eBPF 每 CPU 缓冲 KB高流量调大auto_restart:false# ecapture 异常退出自动重启最多 3 次store:max_sessions:5000# 内存保留会话数环形淘汰max_body_bytes:2097152# 单 body 保留上限超出截断仍统计真实大小conn_idle_timeout:120s# 连接空闲超时REST API自动化场景方法路径说明GET/api/status运行状态与统计POST/api/capture/start启动抓包POST/api/capture/stop停止GET/api/sessions会话列表支持多维过滤GET/api/sessions/{id}会话详情含 bodyDELETE/api/sessions清空认证方式Authorization: Bearer tokenWebSocket/ws推送 session/status/log 三类消息用?token传参。运行效果八、已知限制限制说明单事件 ≤ 16KBeCapture 硬限制h2 走重同步恢复HTTP/1.1 表现为 body 截断h2 中途接入HPACK 是有状态压缩未从连接建立起抓取则头部不可解码响应体仍可还原会话有标注Go/Rust 静态 TLS不经过 libssl 的 TLS如 Go crypto/tls无法捕获高流量丢事件队列满丢弃并计数可调大mapsize仅 HTTPS明文 HTTP 不在范围内九、写在最后PulseHttps 本质上回答的是一个很具体的问题当你对一台 Linux 服务器上的 HTTPS 流量有看一眼的需求但既不能改应用、也不能装证书时还能怎么办eBPF 给了答案PulseHttps 把这个答案做成了顺手的产品形态——单文件部署、浏览器即用、Fiddler 式交互、HTTP/2 完整还原。项目完全开源抓包核心的功劳属于 eCaptureApache License 2.0PulseHttps 在其之上补齐了进程管理、协议重组、会话配对与 Web 交互这一整层。仓库地址https://gitee.com/penngo/ai_projects/tree/master/go/PulseHttps
延伸阅读

更多相关文章

2026/9/26 12:55:03

网页时光机完全指南:历史快照、SEO分析与竞品追踪

1. 网页时光机到底是什么,我为什么离不开它先说结论:网页时光机(Wayback Machine)不是科幻小说里的概念,而是互联网档案馆(Internet Archive)提供的网页历史回滚服务。你可以把它理解成给整个互…

2026/9/26 12:50:03

Cursor 使用心得:ask 模式配合 md 文件与权限配置的实战记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/26 14:00:06

QtCipher实战:SQLite数据库文件加密与常见坑

简介:Sqlite加密插件QtCipher是一份面向Qt开发者的SQLite加密工程资源,基于sqlitecipher库为SQLite数据库提供文件级加密能力,帮助在桌面、移动或嵌入式应用中保护敏感数据,同时维持SQLite的轻量特性。压缩包共23个文件&#xff0…

2026/9/26 14:00:06

高斯消元法零基础详解:手算到Python实现

1. 项目概述 1.1 核心需求解析 高斯消元这个名字,在图书馆、网课弹幕里,都是线性代数这门课里的一个"坎儿"。一堆人挂在"消元""回代""增广矩阵"这些词上,觉得书上写得不像人话,考试的时…

2026/9/26 14:00:06

Claude Code环境变量配置全指南:API密钥与Base URL设置

1. 这不是“安装软件”,而是让Claude Code真正听懂你指令的底层握手协议很多人搜“Claude Code配置教程”,点开就找下载链接、双击安装包、勾选“添加到PATH”——结果打开VS Code,输入/explain,光标闪了三秒,弹出一行…

2026/9/26 14:00:06

Ubuntu安装Docker CE完整指南:避坑内核模块、APT源与权限配置

1. 为什么这个教程值得你花20分钟认真读完Ubuntu安装Docker这件事,看起来就是几条命令的事,但我在过去三年里帮超过120位开发者、运维和学生部署过环境,发现93%的人卡在同一个地方:不是命令输错了,而是根本没意识到自己…

2026/9/26 14:00:06

高斯消元法全解析:从矩阵变换到代码实现的系统指南

高斯消元这东西,我在读书时其实没太当真——觉得不就是初中解方程组换个写法嘛。直到后来做工程,要在代码里解几十上百个未知数的线性系统,才意识到当年课本里那套“加加减减”的操作,是理解整个线性代数的最短路径。这篇文章就从…

2026/9/26 13:55:06

Jev模型接入实战:OpenRouter网关与TypeSafe类型安全输出

1. 一个“不会聊天”的AI,凭什么让我折腾到凌晨两点第一次看到 Jev 这个名字,是在一个做独立开发的朋友群里。有人甩了张截图,说“这玩意儿回答问题跟个闷葫芦似的,但写代码是真的猛”。我当时没太在意,毕竟那阵子各种…

2026/9/25 21:00:17

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/25 20:59:52

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/26 0:04:28

画质修复APP怎么选?Wink影像修复能力与产品实力解析

现如今手机拍摄场景愈发丰富,演唱会直拍、漫展记录、老视频翻新、日常vlog录制,都会遇到画面模糊、噪点多、曝光失衡等问题,不少用户在挑选工具时比较在意一款画质修复APP能够兼顾修复效果与自然质感。Wink作为美图公司推出的全球化AI影像增强…

2026/9/26 0:04:28

超低能耗建筑K值要求能否满足?浙东铝业建筑型材解析

核心摘要浙东铝业的超低能耗系统门窗产品,资料显示保温性能可达 K≤1.4W/(㎡K),能够对应上海地区超低能耗住宅对门窗保温性能的应用需求。判断建筑是否满足超低能耗要求,不能只看铝型材本身,还需要结合玻璃、隔热条、密封系统、开…

2026/9/25 20:55:38

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/25 18:41:36

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/25 18:34:56

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑