找回密码
立即注册
搜索
发回帖 发新帖

5145

积分

0

好友

661

主题
发表于 1 小时前 | 查看: 4| 回复: 0

前言

每天打开电脑,它到底在跟谁通信?哪个应用在偷偷往外传数据?大多数人对这些问题其实说不出个所以然。系统自带的网络面板信息太粗糙,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 实时网络流量监控界面:力导向图展示本机与外部主机的连接拓扑

项目源码

仓库结构大致如下:

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 的定位很清楚:不是抓包分析器,也不是企业级流量审计平台,而是给普通用户看的一扇窗——谁在连、连到哪、能不能拦。它把可视化、异常检测和防火墙编排揉在一起,同时把隐私边界划得很明确:默认不出网、数据不出机、每个外联动作都要你点头。对于想搞清楚本机网络行为、又不想被专业工具门槛挡住的人来说,这是个值得一试的选择。类似的开源工具分享与实战经验,也可以在云栈社区继续交流。




上一篇:Winform 多线程实战:Invoke、BackgroundWorker 与 async/await 三种 UI 更新方案
下一篇:AI代码产出逼近100%,1500行Diff谁来审?大厂今晚聊透黑灯工厂
您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2026-11-6 02:21 , Processed in 0.063193 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2026 云栈社区.

快速回复 返回顶部 返回列表