Skip to content

HotSec/PacketLab

Repository files navigation

PacketLab

HTTP/HTTPS 流量捕获代理 — Capture. Inspect. Replay.

License Go


PacketLab 是一个本地 HTTP/HTTPS 代理工具,用于捕获、检查、编辑和重放网络流量。面向安全研究人员、API 开发者和后端工程师。

功能

  • 代理捕获 — HTTP 和 HTTPS 流量完整记录(方法、URL、请求/响应头、请求/响应体、耗时、大小)
  • HTTPS MITM — 自签名 CA 证书,解密并明文查看 HTTPS 流量
  • 拦截模式 — 自动放过 / 手动审批(Allow / Drop / Modify),手动模式下可编辑请求后转发
  • 编辑重发 — 修改 Method / URL / Headers / Body 后通过代理重新发送
  • API 地图 — 按站点树形展示所有捕获的 API 端点,方法颜色区分,支持添加备注
  • 实时推送 — WebSocket 将新请求即时同步到前端界面
  • 批量写入 — WAL 模式 SQLite,50 条缓冲区 200ms 批量刷新,高流量不阻塞代理
  • 搜索与过滤 — 按方法、URL、状态码、Host 搜索;支持错误筛选
  • i18n — 中文 / English 界面切换
  • 亮/暗主题 — CSS 变量双主题,localStorage 持久化

快速开始

安装

# 克隆仓库
git clone https://github.com/user/packetlab.git
cd packetlab

# 下载依赖
go mod download

# 编译
go build -o packetlab ./cmd/proxy/

运行

# 启动代理(端口 8080)+ Web 界面(端口 9090)
./packetlab

# 仅启动 API + 前端(不启动代理)
./packetlab --no-proxy

# 禁用 HTTPS 解密
./packetlab --no-mitm

访问 http://localhost:9090,配置浏览器 HTTP 代理为 localhost:8080

HTTPS 证书安装

启动时自动生成自签名 CA 证书至 ~/.packetlab/certs/ca.crt

macOS

sudo security add-trusted-cert -d -r trustRoot \
  -k /Library/Keychains/System.keychain \
  ~/.packetlab/certs/ca.crt

或双击 ca.crt → 钥匙串访问 → 系统 → 双击证书 → 信任 → 始终信任。

Windows

certutil -addstore Root %USERPROFILE%\.packetlab\certs\ca.crt

Linux

sudo cp ~/.packetlab/certs/ca.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

命令行参数

参数 默认值 说明
--proxy-port 8080 代理监听端口
--api-port 9090 API/Web 服务端口
--db ~/.packetlab/data.db SQLite 数据库路径
--no-proxy false 仅启动 API 服务,不启动代理
--no-mitm false 禁用 HTTPS MITM 解密
--insecure false 跳过上游 TLS 证书验证
--capture false 启用网卡抓包(需 sudo / CAP_NET_RAW)
--capture-iface auto 指定抓包网卡
--capture-bpf tcp BPF 过滤器
--capture-no-proc false 禁用进程关联
--capture-stream-timeout 2 网卡抓包流空闲超时(分钟)
--max-req-body-kb 2048 请求体最大 KB
--max-res-body-kb 4096 响应体最大 KB

使用指南

基础抓包

  1. 启动 PacketLab
  2. 配置浏览器代理为 localhost:8080
  3. 正常浏览网页 — 请求实时显示在左侧列表
  4. 点击请求查看详情(请求头/体、响应头/体)

拦截模式

  1. 点击顶部 AUTO 按钮切换为 MANUAL
  2. 浏览器发起请求 → 待审请求出现在列表顶部(黄色左边框 + PENDING 徽章)
  3. 点击待审请求 → 右侧显示预填的请求编辑器
  4. 修改 Method/URL/Headers/Body
  5. 点击 Allow 转发修改后的请求,或 Drop 丢弃

API 地图

  1. 切换到「API 地图」标签
  2. 选择站点 → 树形展示所有捕获的 API 路径
  3. 不同 HTTP 方法有不同颜色的左边框(GET 绿 / POST 蓝 / PUT 黄 / DELETE 红 ...)
  4. 左键点击 → 按该路径过滤请求列表
  5. 右键点击 → 添加备注 / 复制路径 / 按站点过滤

编辑重发

  1. 点击任意已捕获请求
  2. 切换到「重发」标签
  3. 修改 Method / URL / Headers / Body
  4. 点击「发送」

API 端点

方法 路径 说明
GET /api/requests 请求列表(支持 method, search, host, error_only, limit, offset
GET /api/requests/:id 请求详情
DELETE /api/requests/:id 删除请求
POST /api/resend 通过代理重发请求
POST /api/clear 清空所有记录
GET /api/stats 统计信息(总数、错误数、数据量)
GET/POST /api/starred 收藏列表 / 切换收藏状态(id, starred
GET /api/apimap API 地图树(参数 host
GET /api/apimap/hosts 站点列表(参数 search, limit, offset
POST /api/apimap/notes 添加/更新备注
DELETE /api/apimap/notes/:id 删除备注
GET/POST /api/intercept/mode 拦截模式查询/切换
GET /api/intercept/pending 待审批请求列表
POST /api/intercept/action 审批操作(allow/drop/modify)
GET/POST /api/intercept/rules 拦截规则(支持 method 维度)
PUT/DELETE /api/intercept/rules/:id 规则启用/删除
GET /api/intercept/logs 拦截日志(action, host, pattern, since
GET/POST /api/capture/status|start|stop 网卡抓包状态/启停
GET /api/export/har 导出 HAR
POST /api/maintenance/cleanup 清理超期数据(retention_days
GET /api/metrics 运行时指标(goroutine/内存/抓包统计)
WS /ws WebSocket 实时通知

架构

cmd/proxy/main.go          # 入口点
cmd/proxy/web/             # 内嵌 SPA 前端
  index.html               # HTML 骨架
  style.css                # 亮/暗双主题样式
  app.js                   # 前端逻辑
internal/
  proxy/                   # 代理核心
    proxy.go               # HTTP/HTTPS 代理 + MITM
    mitm.go                # CA 证书生成
    batch.go               # 批量写入器
    interceptor.go         # 拦截控制器(channel 阻塞)
  api/                     # REST API
    server.go              # 路由与处理器
    ws.go                  # WebSocket Hub
  store/                   # SQLite 持久化
    store.go               # CRUD + API 地图 + 规则
  models/                  # 数据模型
    models.go              # CapturedRequest, InterceptRule, etc.
  config/                  # 配置管理
    config.go              # 环境变量 + 命令行参数

技术栈

组件 技术
语言 Go 1.25+
HTTP 代理 elazarl/goproxy
HTTPS MITM crypto/tls 自签名 CA
数据库 SQLite (modernc.org/sqlite, 纯 Go 无 CGO)
实时通信 WebSocket (gorilla/websocket)
日志 log/slog 结构化日志
前端 Vanilla JS + CSS Variables(零依赖)

快捷键

快捷键 功能
Cmd/Ctrl + K 聚焦搜索框
Cmd/Ctrl + 1/2/3/4 切换请求/响应/重发/API地图
Cmd/Ctrl + Enter 发送重发请求
中键点击搜索框 清空搜索与过滤
右键 API 地图节点 上下文菜单

从源码构建

git clone https://github.com/user/packetlab.git
cd packetlab
go mod download
go build -o packetlab ./cmd/proxy/

贡献

请参阅 CONTRIBUTING.md

更新日志

请参阅 CHANGELOG.md

许可证

MIT License — 详见 LICENSE 文件。

免责声明

PacketLab 仅供合法的安全研究、API 调试和网络分析使用。请遵守当地法律法规,仅在您拥有权限的设备和网络上使用。使用者对自身行为承担全部责任。

About

PacketLab is a local HTTP/HTTPS proxy tool designed for capturing, inspecting, modifying, and replaying network traffic. It is tailored for security researchers, API developers, and backend engineers.

Resources

License

Contributing

Stars

Watchers

Forks

Packages

 
 
 

Contributors