前言
每天打开电脑,它到底在跟谁通信?哪个应用在偷偷往外传数据?大多数人对这些问题其实说不出个所以然。系统自带的网络面板信息太粗糙,Wireshark 又专业到让人劝退。Snitch 想解决的正是这个中间地带的问题——把本机的每一条连接用看得懂的方式呈现出来,顺便把可疑的出站流量拦掉。
项目介绍
Snitch 是一款实时网络流量可视化工具,跨平台、免费、开源(AGPL)。核心逻辑非常朴素:你的机器居中,每个连接就是一个节点,谁连了谁、对方在哪个国家、由哪个进程发起,一目了然。阻断动作交给操作系统原生防火墙(netsh / iptables / pf)执行,Snitch 自己不在用户态做包过滤。所有数据留在本机,默认零对外请求,地理定位也是离线完成的。
项目功能
| 功能 |
说明 |
| 力导向图 |
实时节点图,本机居中,每个连接展开为一个节点 |
| 世界地图 |
地理定位后的 IP 在可交互地球仪上以动画弧线展示 |
| 时间线 |
15/30/60 分钟滑动历史,本地 SQLite 保留 24 小时 |
| 异常检测 |
标记端口扫描、固定间隔 beaconing、潜在数据外泄 |
| 高级检测 |
DNS 隧道启发式、明文端口、按应用的国家基线偏离 |
| 防火墙编排 |
IP/CIDR/域名/进程/端口规则下发到 OS 防火墙,持久化并统计拦截次数 |
| Lockdown 模式 |
应急开关,阻断全部出站公网流量,局域网保持可用 |
| 事件响应 |
从连接详情一键结束/挂起进程、阻断 IP |
| 威胁情报 |
可选开启 AbuseIPDB / AlienVault OTX / VirusTotal 查询,用自己的 API 密钥,结果本地缓存 |
| 安全审计 |
内置加固报告,含评分、发现项和通俗建议 |
| 取证导出 |
进程树+二进制 SHA-256、历史与关联告警,支持 JSON/CSV/STIX |
| Webhook 告警 |
可选把 warning/critical 告警转发到 Discord、Slack、Telegram 或任意端点 |
| 进程归属 |
每个连接显示 Top 5 产生流量的应用 |
| LAN 扫描器 |
基于系统 ARP 表被动发现,不做广播扫描 |
| 隐私评分 |
出站流量暴露度的实时评分 |
| 按应用视图 |
按进程展示目的地、流量与 60 分钟历史 |
| 告警抑制 |
持久化「忽略主机/类型」规则,UI 内可管理 |
| 跟踪器检测 |
后缀匹配域名列表,数据文件可编辑 |
| 带宽监控 |
实时 MB/s 迷你曲线 |
| 多语言 UI |
EN、FR、ES、DE、RU、JA、PT-BR、ZH-CN 一键切换 |
| 主题 |
浅色/深色,默认跟随系统,手动切换会被记住 |
| 自动更新 |
检查 GitHub Releases,可在设置中关闭 |
| QUIC / HTTP/3 |
UDP/443 流如实标注,加密的 SNI 绝不读取 |
| 监视列表 |
固定 IP/域名,流量触碰立即告警 |
| 上传峰值告警 |
按进程 MB/分钟上限,阈值可调 |
| 网卡选择器 |
直接选监听哪块网卡,不用环境变量 |
| Wi-Fi 上下文 |
工具栏显示当前 SSID |
| 导出 |
图+告警一键导出 JSON/CSV |
项目特点
- 跨平台且免费开源:对比 Little Snitch / Lulu,思路相似但不受 macOS 限制;对比 GlassWire,无需账号、默认零对外请求;对比 Wireshark,提供的是高层概览而非原始包剖析。
- 阻断走系统防火墙:规则由后端驱动 netsh、iptables、pf 下发,权限不足时如实标记「未应用」并转为可见性匹配告警,不假装生效。
- 隐私优先:API 默认绑定 127.0.0.1,每个 REST 端点和 WebSocket 都要求令牌;GeoIP 完全离线;威胁情报、webhook、更新检查均为可选开启。
- 数据不出本机:SQLite 滑动窗口与日志文件都只留在本地,无遥测。
- 应急能力实用:Lockdown 保留回环与局域网,UI 依然可达;取证包可一键导出用于事后分析。
- 部署方式灵活:桌面应用、Docker(Linux,host 网络抓包)、无头守护进程 snitchd 覆盖不同场景。
项目技术
| 层次 |
技术 |
| 数据包捕获 |
ctypes → libpcap(Windows 用 Npcap),自研解析器,支持 IPv4/IPv6/TCP/UDP/DNS/TLS-SNI |
| 后端 API |
FastAPI + WebSockets + SQLite |
| 前端 |
React 19 + Vite + D3.js v7 + TopoJSON |
| 桌面封装 |
Electron 44 |
| 地理定位 |
离线 DB-IP Lite(CC BY 4.0),随包以 gzip 提供,首次运行自动解压;也支持 MaxMind GeoLite2 .mmdb |
安全设计上还有几个细节值得注意:CORS 与 WebSocket Origin 有白名单,只允许 localhost:5173、后端自身来源和 Electron 的 file:// 页面;历史数据按分钟聚合到 host_history 与 process_history 两张表;诊断接口返回的是不含机密的运行时快照。
项目效果
打开界面后,本机位于力导向图中心,周围是当前活跃连接节点,节点间连线随流量变化而浮动。切到世界地图,能看到 IP 对应的地理位置和动画弧线,跨洋连接一眼可辨。时间线滑块可以回看最近 15 到 60 分钟的连接变化。异常检测会在端口扫描或固定间隔外联出现时给出告警,隐私评分随之波动。对某个连接展开详情,能看到进程名、目的地、流量和 60 分钟历史,旁边的按钮可以直接结束进程或阻断 IP。设置面板里可以调语言、保留期、过滤器和网卡,GeoIP 下载需要明确同意。

项目源码
仓库结构大致如下:
snitch/
├── backend/ FastAPI + libpcap 捕获(ctypes,自研解析器)
├── frontend/ React + D3.js UI(8 种语言)
├── electron/ Electron 封装(main、splash、preload)
├── data/ 运行时数据(SQLite、geo/ 下的 .mmdb)
└── dist/ 编译产物(后端 exe、安装器)
本地开发需要 Python 3.11+、Node.js 18+,Windows 还要装 Npcap,后端需要管理员终端。想快速看效果可以设 SNITCH_DEMO=1,合成流量走真实管线,无需 root、无需 libpcap,适合截图和测试。
安装方式上,macOS 可用 brew install --cask aixisstudio/tap/snitch,Linux 提供 AppImage / .deb / .rpm / .snap,Windows 有 NSIS 安装器(依赖 Npcap),也可以直接用 Pinokio 一键起后端开 UI。
GitHub:https://github.com/aixisstudio/Snitch
总结
Snitch 的定位很清楚:不是抓包分析器,也不是企业级流量审计平台,而是给普通用户看的一扇窗——谁在连、连到哪、能不能拦。它把可视化、异常检测和防火墙编排揉在一起,同时把隐私边界划得很明确:默认不出网、数据不出机、每个外联动作都要你点头。对于想搞清楚本机网络行为、又不想被专业工具门槛挡住的人来说,这是个值得一试的选择。类似的开源工具分享与实战经验,也可以在云栈社区继续交流。
|