m0vi0/pacmap
GitHub: m0vi0/pacmap
PacMap 是一个将主机通信和数据包活动可视化为动态拓扑地图的本地流量映射与 PCAP 重放工具。
Stars: 6 | Forks: 0
# pacmap
PacMap 是一个用于实时流量映射和 PCAP 重放的本地数据包可视化工具。
它将主机显示为节点,通信显示为边,将数据包活动显示为在稳定的自顶向下网络地图上移动的脉冲。它旨在用于故障排查、数据包调查、家庭实验室可视化和理解通信模式。它不是 IDS 或威胁检测平台。

## 输入模式
PacMap 在 Web 应用中支持两种工作流:
- 实时捕获:检查本地接口上当前正在发生的情况。
- 重放 PCAP:上传保存的 `.pcap` 或 `.pcapng` 文件,并随时间重放数据包流。
该应用在“实时捕获”模式下打开,并使用受 Wireshark 启发的分析选项卡来显示全网统计、会话、端点、协议层次结构和 I/O 图表。PCAP 上传和重放在“实时捕获”选项卡内进行,作为一种备用输入源。
## 安装
在仓库根目录下执行:
```
python3 -m venv venv
source venv/bin/activate
pip install websockets scapy
npm install --prefix client
```
在 Windows 上,使用你常规的 Python 工作流创建并激活 venv,然后安装相同的软件包。Windows 上的数据包捕获需要 Npcap。
## 实时捕获
从仓库根目录启动 PacMap:
```
npm start -- --iface en0
```
常见接口示例:
- macOS Wi-Fi: `en0`
- Linux Ethernet: `eth0`
- Linux Wi-Fi: `wlan0`
- Windows Wi-Fi/Ethernet: 使用 Scapy 显示的 Npcap 接口名称
打开:
```
http://127.0.0.1:5176
```
然后使用“实时捕获”选项卡并点击 `Start live capture`。
原始数据包捕获通常需要提升的本地权限。在 macOS/Linux 上,从具有所需权限的 shell 运行,例如:
```
sudo npm start -- --iface en0
```
在 Windows 上,以管理员身份运行终端。
## 重放 PCAP
打开 Web 应用,选择“实时捕获”,将源切换到 PCAP Replay,并上传 `.pcap` 或 `.pcapng` 文件。然后使用:
- 播放
- 暂停
- 重新开始
- 速度控制
- 时间轴滑块
- 原始/解析 IP 和 MAC 标签的标签模式控件
- 按传输数据排序的会话列表
重放操作在浏览器中进行,不需要运行 Python 捕获服务器。
重放还包括受 Wireshark 启发的调查面板,用于会话、端点、协议分解、名称解析和 I/O 时间轴活动。
当前的重放支持特意专注于有用的 MVP:
- 经典 `.pcap`
- 基本 `.pcapng`
- 常见的 Ethernet、原始 IP、Linux cooked 和 loopback 捕获
- IPv4 和 IPv6 数据包
- TCP、UDP、DNS 和其他 IP 数据包
不支持的帧将被跳过并在 UI 中计数。
## 为什么需要本地辅助程序?
浏览器无法嗅探主机网络流量或直接启动特权数据包捕获。PacMap 使用带有 Scapy 的本地 Python WebSocket 辅助程序进行实时捕获,然后将数据包摘要流式传输到位于以下位置的 React 应用:
```
ws://127.0.0.1:8765
```
PCAP 重放则不同:浏览器读取上传的文件并复用相同的图形可视化,而无需实时访问数据包。
## 手势控制
PacMap 可以使用 MediaPipe 手部追踪进行图形导航。导航模式包括:
```
Zoom, Rotate, Move
```
- Zoom(缩放)改变节点间距,而非相机距离。
- Rotate(旋转)改变图形的偏航角和俯仰角。
- Move(移动)平移集群。
- Pointer(指针)指向节点。
Zoom、Rotate 和 Move 使用相同的锁定流程:在背景中保持手势稳定 1 秒,然后可见圆环在 0.5 秒内完成。任何完成的导航锁定都会进入 Pointer 模式。该锁定通过检查手指间距和手指在相机帧中的位置来容忍正常的手部抖动。
在 Pointer 模式下,拇指-食指点击可直接跳转到导航模式:
- 单次点击:Rotate(旋转)
- 双次点击:Zoom(缩放)
- 三次点击:Move(移动)
Pointer 模式还支持节点选择锁定。瞄准一个节点并以相同的锁定行为保持稳定:在静默稳定性检查之后,圆环完成并锁定该节点以供检查。选定的节点及其本地邻居将保持高亮,直到被清除。
在 Pointer 模式下张开手以清除选定的节点并返回正常的指针指向。
如果在 Pointer 模式下暂时丢失追踪,PacMap 会暂停在最后一次稳定的指针/视图状态。它不会重置集群、相机方向或当前上下文。
## 开发
仅限前端:
```
cd client
npm install
npm run dev
```
客户端 UI 约定:
- Vite 将 `@` 解析为 `client/src`。
- shadcn 风格的 UI 组件位于 `client/src/components/ui`。
- 共享工具位于 `client/src/lib`。
- Tailwind CSS 通过 Vite 客户端配置启用。
生产构建:
```
npm run build
```
仅限捕获服务器:
```
source venv/bin/activate
python3 server.py --iface en0
```
## 故障排查
- 如果 UI 显示捕获服务器离线,则 `server.py` 未运行或 WebSocket 端口不可用。
- 如果捕获失败,请检查接口名称并使用所需的本地权限运行。
- 如果没有出现实时节点,请通过正常浏览、`ping 8.8.8.8`、DNS 查询或其他网络活动产生流量。
- 如果 PCAP 加载时跳过大量数据包,它可能使用了不支持的链路类型、加密/非 IP 流量,或者 PacMap 尚不支持的数据包类型。
## 技术栈
- React + Vite
- Three.js
- Python WebSocket server
- Scapy packet capture
- MediaPipe Hands(手势导航)
标签:DNS枚举, GNU通用公共许可证, Node.js, PCAP回放, Python, Scapy, WebSockets, Wireshark替代, 协议分析, 实时抓包, 故障排查, 无后门, 权限提升, 流量可视化, 流量捕获, 流量监控, 网络安全工具, 网络实验室, 网络拓扑, 自定义脚本, 逆向工具