Snitch 是一款实时网络流量可视化工具。 查看计算机建立的每一次连接——与谁通信、对方位置以及负责的应用程序。
整个界面提供英语和法语支持:使用右上角工具栏中的 EN / FR 切换按钮。
127.0.0.1 上运行并受令牌保护;您的流量数据永远不会离开本机。| 功能 | 描述 |
|---|---|
| 力导向图 | 实时节点图 —— 以您的机器为中心,每次连接作为一个节点 |
| 世界地图 | 带交互式地球仪的动态弧线,显示已定位的 IP |
| 15/30/60 分钟时间轴 | 滑动历史记录本地存储于 SQLite(保留 24 小时) |
| 异常检测 | 标记端口扫描、信标行为及潜在的数据外泄 |
| 进程归属 | 明确哪个应用生成何种流量(每连接前 5 名) |
| LAN 扫描器 | 通过系统 ARP 表被动发现(无广播扫描) |
| 隐私评分 | 实时评估您的出站流量暴露程度 |
| 按应用查看 | 按进程的目的地、流量体积及 60 分钟历史 |
| 告警抑制 | 持久化的“忽略主机/类型”规则,可在 UI 中管理 |
| 设置面板 | 语言、保留策略、过滤器、需同意的 GeoIP 下载、诊断信息 |
| 跟踪器检测 | 后缀匹配域名列表,以可编辑数据文件形式提供(backend/classifier/lists/) |
| 带宽监控 | 实时 MB/s 迷你图 |
| 英/法双语 UI | 完整的双语界面,一键切换 |
| 平台 | 安装包 |
|---|---|
| macOS (Apple Silicon) | brew install --cask aixisstudio/tap/snitch —— 或 Snitch-1.0.4-macos-arm64.zip |
| Linux | sudo docker compose up --build —— 见 Docker (Linux) |
| Windows | 从源码构建 —— 见 构建安装程序 |
或直接获取最新版本:github.com/aixisstudio/Snitch/releases
macOS 首次运行 —— Snitch 采用临时签名,未经公证(无付费 Apple Developer ID)。上述
brew install --cask命令会自动为您移除隔离标志。若手动解压 zip:右键点击 → 打开,或运行xattr -dr com.apple.quarantine /Applications/Snitch.app。首次启动时,Snitch 会要求输入管理员密码 仅一次 —— 数据包捕获需要此权限,与 tcpdump/Wireshark 相同;UI 本身保持非特权状态。
| 层级 | 技术 |
|---|---|
| 数据包捕获 | ctypes → libpcap —— Npcap (Windows) / libpcap (Linux/macOS) —— 自研解析器 (IPv4/IPv6/TCP/UDP/DNS/TLS-SNI) |
| 后端 API | FastAPI —— WebSockets —— SQLite |
| 前端 | React 18 —— Vite —— D3.js v7 —— TopoJSON |
| 桌面封装 | Electron 44 |
| 地理位置 | 仅离线 —— DB-IP Lite (CC BY 4.0) 以 gzip 格式打包在 backend/data/geo/ 中,首次运行时解压;也支持 MaxMind GeoLite2 .mmdb |
data/api_token.txt 中。使用 http://localhost:8000/?token=<TOKEN> 打开 UI(或在提示时输入)。127.0.0.1。仅在您明确需要局域网访问时才设置 SNITCH_BIND=0.0.0.0(令牌认证仍然适用)。localhost:5173、后端自身来源以及 Electron file:// 页面连接。backend/data/geo/,首次启动时自动提取至 <data_dir>/geo/ —— 地理位置开箱即用,零网络请求。您仍可将更新的 GeoLite2-City.mmdb/GeoLite2-ASN.mmdb(MaxMind)放入 <data_dir>/geo/,或从设置面板下载最新的 DB-IP Lite(需明确同意,这是唯一可能的出站请求)。snitch.db(24 小时滑动窗口,可通过 retention_hours 设置配置)和 data/logs/snitch.log 绝不会离开本机。无遥测数据。唯一可能的出站请求是用户主动选择的 DB-IP Lite 下载(设置 → “下载 DB-IP Lite”),需明确点击触发。alert_suppressions 表),在告警发出或记录前生效,并通过 POST /alerts/ignore / DELETE /alerts/ignore / GET /alerts/ignore 实现跨重启持久保存。host_history、process_history)中,覆盖保留窗口期,为按应用视图及 GET /history/host/{ip} / GET /history/process/{name} 提供支持。GET /diagnostics 返回运行时的 JSON 快照(捕获状态、地理数据库状态、接口、版本、路径),不含敏感信息;设置面板可导出该快照或打开日志目录(Electron)。*.local(Apple/Linux)、LLMNR 和 NetBIOS 名称(Windows)、DHCP 主机名选项,以及完整的离线 IEEE OUI 厂商表;您的网关会自动识别为路由器。Docker 部署专为希望在不安装额外软件的情况下运行 Snitch 的 Linux 用户设计。
数据包捕获通过 network_mode: host 实现 —— 容器可直接看到宿主机的真实流量。
注意: Mac/Windows 上的 Docker Desktop 运行在虚拟机内,无法捕获宿主机流量。请在这些平台上使用 Electron 应用。
# 克隆仓库并进入目录
git clone <your-repo-url> snitch
cd snitch
# 可选:将 MaxMind GeoLite2-City.mmdb 放入 data/ 目录以实现离线地理位置查询
mkdir -p data
# 构建并运行(需要 Docker + root/sudo 权限进行原始套接字捕获)
sudo docker compose up --build
获取 API 令牌(启动时打印一次,或执行 cat data/api_token.txt),然后在浏览器中打开 **http://localhost:8000/?token=TOKEN**。
后台运行:sudo docker compose up -d --build
Docker 限制:
环境要求:
演示模式 —— 使用
SNITCH_DEMO=1运行后端,将合成流量注入真实处理管道:无需 root 权限,无需 libpcap,不触碰真实数据包。非常适合截图、测试和预览。
# 后端(管理员终端)—— API 位于 http://127.0.0.1:8000
cd backend
pip install -r requirements.txt
python run_backend.py # 打印一次 API 令牌
# 前端(独立终端)—— UI 位于 http://localhost:5173/?token=TOKEN
cd frontend
npm install
npm run dev
# Electron(可选,管理员终端)—— 令牌自动注入
cd electron
npm install
set VITE_DEV=1 # Windows
# VITE_DEV=1 # macOS/Linux Shell
npx electron .
测试:
cd backend && pip install -r requirements-dev.txt && python -m pytest tests/ -v
cd frontend && npm test
# 1 — 编译后端(PyInstaller)
cd backend
pip install pyinstaller
pyinstaller backend.spec --distpath ../dist/backend
# 2 — 构建前端
cd frontend
npm run build
# 3 — 构建 Electron 安装程序
cd electron
npm run build:dir
snitch/
├── backend/ Python FastAPI + libpcap 捕获引擎(ctypes,自研解析器)
├── frontend/ React + D3.js UI(英/法双语)
├── electron/ Electron 封装(main, splash, preload)
├── data/ 运行时数据(SQLite 数据库,geo/ 目录下的 .mmdb 地理库)
└── dist/ 编译输出(后端 exe,安装程序)
Snitch 是一款实时网络流量可视化工具。 查看计算机建立的每一次连接——与谁通信、服务器位置以及负责的应用程序。
整个界面提供法语和英语支持:使用右上角工具栏中的 EN / FR 切换按钮。
127.0.0.1 上运行并受令牌保护;您的流量数据永远不会离开本机。| 功能 | 描述 |
|---|---|
| 力导向图 | 实时节点图 —— 以您的机器为中心,每次连接作为一个节点 |
| 世界地图 | 带交互式地球仪的动态弧线,显示已定位的 IP |
| 15/30/60 分钟时间轴 | 滑动历史记录本地存储于 SQLite(保留 24 小时) |
| 异常检测 | 标记端口扫描、信标行为及潜在的数据外泄 |
| 进程归属 | 明确哪个应用生成何种流量(每连接前 5 名) |
| LAN 扫描器 | 通过系统 ARP 表被动发现(无广播扫描) |
| 隐私评分 | 实时评估您的出站流量暴露程度 |
| 按应用查看 | 按进程的目的地、流量体积及 60 分钟历史 |
| 告警抑制 | 持久化的“忽略主机/类型”规则,可在 UI 中管理 |
| 设置面板 | 语言、保留策略、过滤器、需同意的 GeoIP 下载、诊断信息 |
| 跟踪器检测 | 后缀匹配域名列表,以可编辑数据文件形式提供(backend/classifier/lists/) |
| 带宽监控 | 实时 MB/s 迷你图 |
| 英/法双语 UI | 完整的双语界面,一键切换 |