Skip to content

vastmediads/SNInsight

Repository files navigation

SNInsight

SNInsight是一个Go应用程序,可以被动监控网络流量,从TLS握手中提取服务器名称指示(SNI),将TCP连接流量与相应的SNI关联,并计算每个SNI域的实时流量。

功能特点

  • 使用gopacket库进行被动数据包捕获
  • 使用BPF规则进行高效的数据包过滤
  • 从TLS ClientHello消息中提取SNI
  • 连接跟踪和SNI关联
  • 每个SNI域的实时流量统计
  • 以格式良好的表格或JSON显示结果

要求

  • Go 1.23
  • 数据包捕获需要root权限或CAP_NET_RAW、CAP_NET_ADMIN能力
  • 安装了libpcap的Linux、macOS或Windows

使用方法

# 基本用法
sudo ./SNInsight -i eth0

# 监控多个接口
sudo ./SNInsight -i eth0,eth1

# 监控自定义端口
sudo ./SNInsight -i eth0 -p 443,8443

# 使用自定义BPF过滤器
sudo ./SNInsight -i eth0 -f "tcp and port 443"

# 更改刷新间隔
sudo ./SNInsight -i eth0 -r 2s

# 以JSON格式输出
sudo ./SNInsight -i eth0 --output-format json

# 按主机名排序
sudo ./SNInsight -i eth0 --sort-by name

# 启用详细日志记录
sudo ./SNInsight -i eth0 -v

# 跟踪非SNI流量(以IP为键)
sudo ./SNInsight -i eth0 --track-non-sni

# 使用TZSP监听RouterOS镜像流量
sudo ./SNInsight --tzsp

# 从PCAP文件读取数据包
sudo ./SNInsight --read-pcap capture.pcap

命令行选项

基本选项

  • -i, --interface: 要监听的网络接口(逗号分隔)
  • -p, --port: 要监控的TLS端口(逗号分隔,默认值:"443")
  • -f, --filter: 自定义BPF过滤器字符串(覆盖默认端口过滤器)
  • -r, --refresh-interval: 显示刷新速率(默认值:"1s")
  • --cleanup-timeout: 非活动连接清理超时(默认值:"120s")
  • --resolve-ip: 尝试对IP进行反向DNS查找(默认值:false)
  • --output-format: 指定输出格式(table, json,默认值:"table")
  • -v, --verbose: 启用详细/调试日志记录(默认值:false)
  • --sort-by: 结果排序的列(traffic, rate, name,默认值:"traffic")
  • --track-non-sni: 是否跟踪没有SNI的TCP连接,使用IP地址(默认值:false)

TZSP相关选项

  • --tzsp: 启用TZSP监听器接收RouterOS镜像流量(默认值:false)
  • --tzsp-address: TZSP监听地址(默认值:"0.0.0.0")
  • --tzsp-port: TZSP监听端口(默认值:37008)

文件相关选项

  • --pcap-file: 与接口或TZSP捕获一起使用时,将捕获的数据包保存到pcap文件
  • --log-file: 将数据包摘要保存到日志文件
  • --read-pcap: 从pcap文件读取数据包作为输入源

BPF过滤器示例

  • tcp port 443: 仅监控HTTPS流量
  • tcp port 80 or tcp port 443: 监控HTTP和HTTPS流量
  • host 192.168.1.1: 监控特定IP的所有流量
  • tcp dst port 443 and not src net 192.168.0.0/16: 监控来自非本地网络到HTTPS的流量
  • tcp port not 443 and tcp[((tcp[12:1] & 0xf0) >> 2):4] = 0x16030103: 监控非标准端口上的TLS流量

限制

  • 无法从使用加密客户端Hello(ECH)或加密SNI(ESNI)的连接中提取SNI
  • 需要足够的权限来捕获数据包
  • 性能可能会随网络流量的变化而变化

安装

从源代码安装

git clone https://github.com/yourusername/SNInsight.git
cd SNInsight
go build

使用Go Install

go install github.com/yourusername/SNInsight@latest

为Debian交叉编译

要从ARM Mac为Debian x86系统构建:

  1. 安装GoReleaser v2或更高版本和Docker:
brew install goreleaser/tap/goreleaser

docker.com安装Docker Desktop。

确保您拥有GoReleaser 2.x或更高版本:

goreleaser --version

并验证Docker是否正在运行:

docker info
  1. 运行构建脚本:
./build-debian.sh

编译好的二进制文件将在dist/目录中。

  1. 将二进制文件传输到Debian系统,安装依赖项并设置所需的功能:
# 在目标Debian系统上安装libpcap
sudo apt-get update
sudo apt-get install -y libpcap-dev

# 为二进制文件设置功能
sudo setcap cap_net_raw,cap_net_admin=eip SNInsight

许可证

MIT许可证

运行截图

SNInsight运行截图

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages