# FastMonitor
**Repository Path**: homingfly/FastMonitor
## Basic Information
- **Project Name**: FastMonitor
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Apache-2.0
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2025-12-25
- **Last Updated**: 2025-12-25
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# FastMonitor - 网络流量监控与威胁检测工具
## 📖 项目简介
**FastMonitor** 是一款基于 **Wails 框架**开发开源的**跨平台网络流量监控与威胁检测工具**,集成了数据包分析、进程关联、会话流统计、威胁情报检测、地理位置可视化等功能于一体。
- **最新版本**: 1.0.0
- **更新日期**: 2025/10/8
- **下载地址**: https://github.com/vam876/FastMonitor/releases
- **作者其他项目推荐**: [WEB日志可视化分析工具](https://github.com/vam876/FastWLAT) **|** [图形化Windows日志安全分析工具](https://github.com/vam876/FastWinLog) **|** [图形化Linux日志安全分析工具](https://github.com/vam876/FastLinLog)
### 核心特性
- 🚀 **高性能抓包引擎**: 基于 gopacket/pcap 实现,支持数据包实时处理,并对五元组会话/DNS/ICMP/HTTP进行分类展示
- 🎯 **精准进程关联**: 自动将网络流量与进程绑定,支持主流操作系统
- 🛡️ **智能威胁检测**: 支持自定义病毒等威胁情报IOC规则,实时告警
- 🌍 **3D地理可视化**: 基于 ECharts GL 的3D地球和2D地图流量展示
- 📊 **实时仪表盘**: 大屏展示网络流量、协议分布、TOP排行
- 💾 **数据持久化**: SQLite存储 + PCAP文件归档,支持历史回溯
- 🎨 **现代化界面**: Vue 3 + Element Plus + 浅色/深色主题
- **上图:可视化仪表盘,网络数据一目了然**
- **上图:系统网络会话监听,支持进程关联**
- **上图:网络流量监控,数据外发及时发现**
- **上图:对当前计算机进行流量进程监听,支持监听系统进程、DNS请求、网络请求等,实现安全态势感知**
- **上图:将当前计算机的所有网络访问进行可视化,渲染到地图组件,支持世界地图和中地图**
- **上图:将当前计算机的所有网络访问进行可视化,将数据渲染后3D 地球 实现本网络访问可视化分析**
---
## 🎯 主要用途
| 应用场景 | 功能描述 |
|---------|---------|
| **网络监控** | 实时监控内网流量,发现异常外联和数据泄露 |
| **安全威胁分析** | 检测C2通信、钓鱼攻击、恶意软件行为 |
| **流量审计** | 记录所有网络活动,支持取证和合规审计 |
| **性能诊断** | 分析网络瓶颈、异常流量、协议分布 |
| **开发调试** | 抓包分析HTTP/DNS/ICMP等协议细节 |
| **安全研究** | 恶意样本行为分析、IOC提取 |
---
## 🏗️ 系统架构
```
┌─────────────────────────────────────────────────────────────┐
│ FastMonitor 前端 │
│ Vue 3 + TypeScript + Element Plus │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │
│ │仪表盘 │数据包 │会话流 │进程 │告警 │ │
│ │2D/3D地图 │DNS/HTTP │统计 │关联 │规则 │ │
│ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ │
└───────┼──────────┼──────────┼──────────┼──────────┼─────────┘
│ │ │ │ │
│ Wails RPC (JSON) │
│ │ │ │ │
┌───────┼──────────┼──────────┼──────────┼──────────┼─────────┐
│ ▼ ▼ ▼ ▼ ▼ │
│ FastMonitor 后端 (Go) │
│ ┌──────────┬──────────┬──────────┬──────────┬──────────┐ │
│ │抓包引擎 │协议解析 │进程映射 │告警引擎 │存储层 │ │
│ │gopacket │Parser │Process │Alert │SQLite │ │
│ │ │ │Mapper │Engine │PCAP │ │
│ └────┬─────┴────┬─────┴────┬─────┴────┬─────┴────┬─────┘ │
│ │ │ │ │ │ │
│ ▼ ▼ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────┐ │
│ │ 网络接口层 (NIC Capture) │ │
│ │ Ethernet / Wi-Fi / VPN / Loopback │ │
│ └─────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
```
---
## 📚 功能模块详解
### 1️⃣ 网卡选择 (Network Interface Selection)
#### 功能描述
- 自动检测系统所有可用网络接口(网卡)
- 支持物理网卡、虚拟网卡、回环接口、VPN隧道
- 实时显示网卡状态和流量统计
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **网卡列表** | 显示所有接口名称、IP地址、MAC地址、状态 |
| **网卡筛选** | 支持按接口类型(有线/无线/虚拟)筛选 |
| **实时状态** | 显示接口是否激活、当前流量速率 |
| **快速切换** | 一键切换抓包网卡,无需重启 |
| **权限检测** | 自动检测抓包权限,提示管理员权限 |
#### 技术实现
```go
// 网卡枚举 (internal/capture/capture.go)
func ListInterfaces() ([]*NetworkInterface, error) {
devices, _ := pcap.FindAllDevs()
for _, device := range devices {
// 解析IP、MAC、MTU等信息
// 检测网卡状态和类型
}
}
```
#### 使用说明
1. **启动应用** → 点击顶部工具栏"设置"按钮
2. **网卡列表** → 显示所有可用网卡及其详细信息
3. **选择网卡** → 点击目标网卡,系统自动切换抓包接口
4. **开始抓包** → 点击"开始捕获"按钮开始监控
#### 常见问题
- ❌ **无网卡显示**: 需要以管理员/root权限运行,需安装Npcap (https://npcap.com/)
- ❌ **抓包失败**: 检查WinPcap/Npcap(Windows)或libpcap(Linux/macOS)是否安装
- ✅ **推荐网卡**: 选择活跃流量的物理网卡,避免选择回环接口
---
### 2️⃣ 仪表盘 (Dashboard)
#### 功能描述
提供实时网络流量监控的大屏展示,包括统计图表、TOP排行、协议分布等可视化组件。
#### 核心功能
| 模块 | 说明 |
|-----|------|
| **实时流量曲线** | 显示上下行流量的时间趋势(bps/pps) |
| **协议分布饼图** | TCP/UDP/ICMP/DNS/HTTP等协议占比 |
| **TOP源地址** | 流量最大的前10个源IP |
| **TOP目标地址** | 流量最大的前10个目标IP |
| **TOP进程排行** | 网络活动最频繁的前10个进程 |
| **地理分布热力** | 连接国家/地区的热力地图 |
| **告警统计** | 实时显示Critical/Warning/Info告警数量 |
#### 可视化组件
```typescript
// 流量趋势图 (ECharts折线图)
{
xAxis: { data: timestamps }, // 时间轴
series: [
{ name: '上行流量', data: txBytes },
{ name: '下行流量', data: rxBytes }
]
}
// 协议分布图 (ECharts饼图)
{
series: [{
type: 'pie',
data: [
{ name: 'TCP', value: 45.2 },
{ name: 'UDP', value: 30.1 },
{ name: 'ICMP', value: 5.3 }
]
}]
}
```
#### 数据刷新
- **默认刷新间隔**: 2秒
- **数据窗口**: 最近60秒/5分钟/1小时可选
- **自适应性能**: 流量过大时自动降低刷新率
#### 大屏模式
- **触发方式**: 点击仪表盘右上角"全屏"按钮
- **布局风格**: 深色主题 + 赛博朋克风格边框
- **特殊效果**: 数字滚动动画、图表自适应缩放
- **退出方式**: 按ESC键或点击右上角退出按钮
---
### 3️⃣ 数据包 (Packet Capture)
#### 功能描述
实时捕获并解析网络数据包,支持多层协议分析和数据包过滤。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **实时抓包** | 每秒捕获数千个数据包并解码 |
| **多层解析** | 解析Ethernet → IP → TCP/UDP → HTTP/DNS |
| **字段提取** | 自动提取源/目标IP、端口、协议、载荷 |
| **BPF过滤器** | 支持Berkeley Packet Filter语法 |
| **数据包详情** | 显示原始十六进制和ASCII载荷 |
| **导出功能** | 导出为PCAP格式供Wireshark分析 |
#### 数据包字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `timestamp` | 捕获时间(纳秒精度) | 2025-10-08 14:32:15.123456 |
| `src_ip` | 源IP地址 | 192.168.1.100 |
| `dst_ip` | 目标IP地址 | 8.8.8.8 |
| `src_port` | 源端口 | 51234 |
| `dst_port` | 目标端口 | 443 |
| `protocol` | 传输层协议 | TCP / UDP / ICMP |
| `length` | 数据包长度(字节) | 1420 |
| `payload` | 应用层载荷(Base64编码) | SGVsbG8gV29ybGQ= |
| `process_name` | 关联进程名(如果成功映射) | chrome.exe |
#### BPF过滤器示例
```bash
# 只捕获HTTP流量
tcp port 80 or tcp port 8080
# 只捕获DNS查询
udp port 53
# 只捕获特定IP的流量
host 192.168.1.100
# 只捕获出站流量
src net 192.168.0.0/16
# 组合条件
tcp and dst port 443 and not host 127.0.0.1
```
#### 技术实现
```go
// 数据包捕获主循环 (internal/capture/capture.go)
func (c *Capture) Start() {
handle, _ := pcap.OpenLive(c.device, snapLen, promiscuous, timeout)
packetSource := gopacket.NewPacketSource(handle, handle.LinkType())
for packet := range packetSource.Packets() {
// 解析Ethernet层
ethLayer := packet.Layer(layers.LayerTypeEthernet)
// 解析IP层
ipLayer := packet.Layer(layers.LayerTypeIPv4)
// 解析TCP/UDP层
tcpLayer := packet.Layer(layers.LayerTypeTCP)
// 提取载荷
payload := packet.ApplicationLayer().Payload()
// 发送到处理管道
c.packetChan <- parsedPacket
}
}
```
#### 性能优化
- **零拷贝**: 使用 `gopacket.NoCopy` 避免内存复制
- **批量处理**: 100个数据包批量入库
- **环形缓冲**: 内存限制时丢弃旧数据包
- **异步写入**: 抓包线程和存储线程分离
---
### 4️⃣ DNS解析 (DNS Queries)
#### 功能描述
专门捕获并分析DNS查询和响应,检测恶意域名和DNS隧道。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **DNS记录解析** | 解析A/AAAA/CNAME/MX/TXT等记录类型 |
| **查询统计** | 统计最频繁查询的域名TOP10 |
| **响应时间** | 记录DNS服务器响应延迟 |
| **失败查询** | 记录NXDOMAIN和SERVFAIL响应 |
| **恶意域名检测** | 匹配威胁情报中的C2域名 |
#### DNS字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `query_name` | 查询域名 | www.example.com |
| `query_type` | 记录类型 | A / AAAA / CNAME |
| `response_code` | 响应码 | NOERROR / NXDOMAIN |
| `answers` | 解析结果(JSON数组) | ["93.184.216.34"] |
| `dns_server` | DNS服务器IP | 8.8.8.8 |
| `latency_ms` | 响应时间(毫秒) | 23 |
#### 威胁检测规则
```go
// DNS规则匹配 (内置银狐C2域名)
rule := &AlertRule{
Name: "银狐病毒 - C2域名检测",
RuleType: "dns",
ConditionField: "domain",
ConditionOperator: "contains",
ConditionValue: "12-18.qq-weixin.org,8004.twilight.zip,addr.ktsr.cc",
AlertLevel: "critical",
}
// 匹配逻辑
func matchDNSRule(queryName string, rule *AlertRule) bool {
domains := strings.Split(rule.ConditionValue, ",")
for _, domain := range domains {
if strings.Contains(queryName, domain) {
return true // 触发告警!
}
}
return false
}
```
#### 使用场景
- 🔍 **恶意软件外联**: 检测DGA域名、C2域名
- 🛡️ **钓鱼攻击**: 识别伪装成银行/政府的钓鱼域名
- 📊 **流量分析**: 统计员工访问最多的网站
- 🚫 **DNS劫持**: 检测异常的DNS响应(如返回错误IP)
---
### 5️⃣ HTTP流量 (HTTP Requests)
#### 功能描述
捕获并分析HTTP/HTTPS流量,提取URL、User-Agent、状态码等关键信息。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **HTTP请求解析** | 提取Method/URL/Headers/Body |
| **HTTP响应解析** | 提取Status Code/Content-Type/Length |
| **HTTPS元数据** | 即使不解密也能提取SNI域名 |
| **恶意URL检测** | 匹配钓鱼URL和恶意下载链接 |
| **User-Agent分析** | 识别浏览器/爬虫/恶意软件UA |
#### HTTP字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `method` | HTTP方法 | GET / POST / PUT |
| `url` | 完整URL | https://example.com/api/data |
| `host` | 目标主机名 | example.com |
| `user_agent` | 客户端标识 | Mozilla/5.0 ... |
| `status_code` | 响应状态码 | 200 / 404 / 500 |
| `content_type` | 内容类型 | application/json |
| `content_length` | 响应大小(字节) | 4096 |
#### 威胁检测规则
```go
// HTTP规则 - 检测恶意PNG下载
rule := &AlertRule{
Name: "银狐病毒 - 恶意PNG下载检测",
RuleType: "http",
ConditionField: "url",
ConditionOperator: "regex",
ConditionValue: "(?i)183\\.167\\.230\\.197:18743/(0CFA042F|5B16AF14|57BC9B7E|test)\\.Png",
AlertLevel: "critical",
}
// HTTP规则 - 检测钓鱼URL
rule := &AlertRule{
Name: "银狐病毒 - 钓鱼URL检测",
RuleType: "http",
ConditionField: "url",
ConditionOperator: "contains",
ConditionValue: "cuomicufvhehy.cn",
AlertLevel: "critical",
}
```
#### HTTPS流量处理
⚠️ **注意**: FastMonitor **不解密HTTPS流量**(无中间人攻击),但仍可提取:
- **SNI(Server Name Indication)**: TLS握手时的明文域名
- **证书信息**: 服务器证书的颁发者和有效期
- **流量统计**: 上下行字节数和数据包数量
---
### 6️⃣ ICMP流量 (ICMP Packets)
#### 功能描述
捕获并分析ICMP数据包,包括ping请求、traceroute、网络不可达等消息。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **ICMP类型识别** | Echo Request/Reply、Destination Unreachable |
| **Ping统计** | 往返时延(RTT)、丢包率 |
| **网络诊断** | 识别路由问题、MTU问题 |
| **异常检测** | 检测ICMP Flood攻击、ICMP隧道 |
#### ICMP字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `type` | ICMP类型 | 8(Echo Request) / 0(Echo Reply) |
| `code` | ICMP代码 | 0(网络不可达) / 1(主机不可达) |
| `sequence` | 序列号 | 12345 |
| `identifier` | 标识符 | 54321 |
| `rtt_ms` | 往返时延(毫秒) | 15.2 |
#### 常见ICMP类型
| Type | Code | 说明 |
|------|------|------|
| 0 | 0 | Echo Reply (Ping响应) |
| 3 | 0-15 | Destination Unreachable (目标不可达) |
| 8 | 0 | Echo Request (Ping请求) |
| 11 | 0-1 | Time Exceeded (TTL超时,traceroute) |
---
### 7️⃣ 会话流统计 (Session Flow Statistics)
#### 功能描述
将零散的数据包聚合为会话流(Session),统计每个会话的流量、时延、数据包数等指标。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **五元组聚合** | 按(SrcIP, DstIP, SrcPort, DstPort, Protocol)聚合 |
| **双向流量统计** | 分别统计上下行字节数和数据包数 |
| **会话时长** | 记录会话开始时间和持续时长 |
| **地理位置** | 自动查询目标IP的国家/城市 |
| **进程绑定** | 自动关联发起该会话的进程 |
| **状态追踪** | 识别TCP连接状态(SYN/ACK/FIN/RST) |
#### 会话字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `session_key` | 会话唯一标识(哈希) | a3f8c2d1... |
| `src_ip` | 源IP | 192.168.1.100 |
| `dst_ip` | 目标IP | 93.184.216.34 |
| `src_port` | 源端口 | 51234 |
| `dst_port` | 目标端口 | 443 |
| `protocol` | 协议 | TCP |
| `tx_bytes` | 上行字节数 | 1024000 |
| `rx_bytes` | 下行字节数 | 5120000 |
| `tx_packets` | 上行数据包数 | 1500 |
| `rx_packets` | 下行数据包数 | 3800 |
| `start_time` | 会话开始时间 | 2025-10-08 14:32:15 |
| `duration_sec` | 会话持续时长(秒) | 125.3 |
| `dst_country` | 目标国家 | United States |
| `dst_city` | 目标城市 | Ashburn |
| `process_name` | 关联进程 | chrome.exe |
#### 会话聚合逻辑
```go
// 会话Key计算 (双向对称哈希)
func sessionKey(srcIP, dstIP string, srcPort, dstPort uint16, proto string) string {
// 确保双向流量使用相同Key
if srcIP > dstIP || (srcIP == dstIP && srcPort > dstPort) {
srcIP, dstIP = dstIP, srcIP
srcPort, dstPort = dstPort, srcPort
}
return fmt.Sprintf("%s:%d-%s:%d-%s", srcIP, srcPort, dstIP, dstPort, proto)
}
// 会话更新
func updateSession(packet *Packet) {
key := sessionKey(packet.SrcIP, packet.DstIP, ...)
session := sessions[key]
// 更新统计
if packet.SrcIP == session.SrcIP {
session.TxBytes += packet.Length
session.TxPackets++
} else {
session.RxBytes += packet.Length
session.RxPackets++
}
session.LastSeen = time.Now()
}
```
#### 使用场景
- 📊 **流量审计**: 查看某IP的所有外联会话
- 🔍 **异常检测**: 发现流量异常大的会话(如数据外泄)
- 🌍 **地理分析**: 统计连接最多的国家/地区
- 🚫 **黑名单拦截**: 阻断连接到恶意IP的会话
---
### 8️⃣ 进程关联 (Process Mapping)
#### 功能描述
自动将网络流量与发起该流量的进程绑定,实现进程级网络监控。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **进程枚举** | 遍历系统所有进程及其网络连接 |
| **连接映射** | 将(IP, Port)映射到进程PID |
| **进程信息** | 提取进程名、路径、命令行、启动时间 |
| **进程统计** | 统计每个进程的网络流量和连接数 |
| **进程告警** | 检测恶意进程的网络行为 |
#### 进程字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `pid` | 进程ID | 1234 |
| `name` | 进程名 | chrome.exe |
| `path` | 完整路径 | C:\Program Files\Google\Chrome\chrome.exe |
| `cmdline` | 命令行参数 | --type=renderer --lang=zh-CN |
| `connections` | 活跃连接数 | 15 |
| `tx_bytes` | 进程上传总量 | 10240000 |
| `rx_bytes` | 进程下载总量 | 51200000 |
| `start_time` | 进程启动时间 | 2025-10-08 14:00:00 |
#### 技术实现
```go
// Windows进程映射 (internal/process/mapper.go)
func GetProcessByConnection(localIP string, localPort uint16) (*Process, error) {
// 方法1: GetExtendedTcpTable (Windows)
table, _ := GetExtendedTcpTable()
for _, row := range table {
if row.LocalAddr == localIP && row.LocalPort == localPort {
return GetProcessByPID(row.OwningPid)
}
}
// 方法2: /proc/net/tcp (Linux)
f, _ := os.Open("/proc/net/tcp")
scanner := bufio.NewScanner(f)
for scanner.Scan() {
// 解析/proc/net/tcp格式,提取inode
// 遍历/proc/[pid]/fd找到匹配inode的进程
}
}
```
#### 威胁检测规则
```go
// 进程规则 - 检测恶意进程
rule := &AlertRule{
Name: "银狐病毒 - 已知恶意进程检测",
RuleType: "process",
ConditionField: "process_name",
ConditionOperator: "regex",
ConditionValue: "(?i)(Ubit\\.exe|DUbit\\.exe|ggaa\\.exe|wrdlv4\\.exe|GDFInstall\\.exe|dzfp\\.exe|ChromeGPT_install\\.exe)",
AlertLevel: "critical",
}
```
---
### 9️⃣ 告警系统 (Alert System)
#### 功能描述
基于威胁情报IOC规则,实时检测恶意流量并生成告警。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **规则引擎** | 支持正则表达式、关键词匹配 |
| **多级告警** | Critical / Error / Warning / Info |
| **告警聚合** | 相同特征的告警自动合并计数 |
| **告警确认** | 支持手动确认和批量确认 |
| **告警导出** | 导出为JSON/CSV供SIEM分析 |
| **内置规则** | 预置部分银狐病毒等威胁的IOC规则示例 |
#### 告警规则字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `name` | 规则名称 | 银狐病毒 - C2域名检测 |
| `rule_type` | 规则类型 | dns / http / process / dst_ip |
| `condition_field` | 匹配字段 | domain / url / process_name / dst_ip |
| `condition_operator` | 匹配操作符 | contains / regex / equals |
| `condition_value` | 匹配值 | 12-18.qq-weixin.org,addr.ktsr.cc |
| `alert_level` | 告警级别 | critical / warning / info |
| `description` | 规则描述 | 检测银狐病毒已知C2域名(2025年活跃) |
| `enabled` | 是否启用 | true / false |
#### 内置威胁检测规则
系统预置了**5条示例规则**,针对**银狐病毒(SilverFox)**等APT威胁:
**1. 银狐病毒 - 已知恶意进程检测** (Critical)
- 类型: `process`
- 特征: `Ubit.exe`, `DUbit.exe`, `ggaa.exe`, `wrdlv4.exe`, `GDFInstall.exe`, `dzfp.exe`, `ChromeGPT_install.exe`
- 说明: 检测7个已知恶意进程,包括进程注入、计划任务保活、白+黑加载器等
**2. 银狐病毒 - C2域名检测** (Critical)
- 类型: `dns`
- 特征: `12-18.qq-weixin.org`, `8004.twilight.zip`, `cuomicufvhehy.cn`, `addr.ktsr.cc`, `uiekjxw.net`, `iuearx.net` 等10个域名
- 说明: 检测C2心跳、钓鱼跳转、远控备用C2等恶意域名
**3. 银狐病毒 - C2服务器IP检测** (Critical)
- 类型: `dst_ip`
- 特征: `183.167.230.197`, `154.94.232.120`, `38.181.42.127`, `192.238.129.9` 等11个IP
- 说明: 检测连接到C2服务器的流量(2025年活跃IP)
**4. 银狐病毒 - 恶意PNG下载检测** (Critical)
- 类型: `http`
- 特征: `183.167.230.197:18743/(0CFA042F|5B16AF14|57BC9B7E|test).Png`
- 说明: 检测通过PNG文件伪装的恶意载荷下载
**5. 银狐病毒 - 钓鱼URL检测** (Critical)
- 类型: `http`
- 特征: `baidu.com@cuomicufvhehy.cn`
- 说明: 检测伪装成百度的钓鱼URL
#### 规则匹配逻辑
```go
// 告警规则匹配 (internal/store/alert.go)
func matchRule(value string, rule *AlertRule) bool {
switch rule.ConditionOperator {
case "regex":
// 正则匹配(支持(?i)忽略大小写)
re, _ := regexp.Compile(rule.ConditionValue)
return re.MatchString(value)
case "contains":
// 逗号分隔的多值匹配
values := strings.Split(rule.ConditionValue, ",")
for _, v := range values {
if strings.Contains(value, strings.TrimSpace(v)) {
return true
}
}
return false
case "equals":
// 精确匹配
return value == rule.ConditionValue
}
}
```
#### 告警日志字段
| 字段名 | 说明 | 示例 |
|-------|------|------|
| `id` | 告警ID | 12345 |
| `rule_id` | 触发的规则ID | 3 |
| `rule_name` | 规则名称 | 银狐病毒 - C2域名检测 |
| `alert_level` | 告警级别 | critical |
| `trigger_value` | 触发值 | 12-18.qq-weixin.org |
| `packet_id` | 关联数据包ID | 67890 |
| `src_ip` | 源IP | 192.168.1.100 |
| `dst_ip` | 目标IP | 183.167.230.197 |
| `process_name` | 关联进程 | chrome.exe |
| `count` | 聚合计数 | 15 |
| `first_seen` | 首次触发时间 | 2025-10-08 14:32:15 |
| `last_seen` | 最后触发时间 | 2025-10-08 14:45:30 |
| `acknowledged` | 是否已确认 | false / true |
| `acknowledged_at` | 确认时间 | 2025-10-08 15:00:00 |
#### 规则版本管理
- ✅ **版本控制**: v1.0.0
- ✅ **自动更新**: 只在版本升级时重新安装规则
- ✅ **智能清理**: 自动删除旧版本规则,避免重复
- ✅ **性能优化**: 避免每次启动都重复插入规则
#### 使用场景
- 🛡️ **APT检测**: 检测银狐、Lazarus等APT组织的IOC
- 🚨 **实时告警**: 发现恶意流量立即弹窗提醒
- 📊 **安全态势**: 统计告警趋势,评估网络安全状况
- 🔍 **溯源分析**: 通过告警记录追溯攻击路径
---
### 🔟 2D地图 (2D Map Visualization)
#### 功能描述
基于ECharts Geo组件的世界地图流量可视化,显示全球连接分布。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **地理编码** | 自动查询IP的经纬度坐标(GeoIP) |
| **热力图** | 根据连接数量显示热力分布 |
| **连接线** | 显示源IP到目标IP的连线 |
| **国家统计** | 统计连接最多的TOP国家 |
| **交互式操作** | 支持缩放、平移、点击查看详情 |
#### 可视化效果
```typescript
// 2D地图配置 (ECharts Geo)
{
geo: {
map: 'world',
roam: true, // 支持缩放和平移
itemStyle: {
areaColor: '#1a1a2e',
borderColor: '#16213e'
}
},
series: [
{
type: 'scatter', // 散点图(显示IP位置)
coordinateSystem: 'geo',
data: [
{ name: '192.168.1.100', value: [116.4, 39.9, 100] } // [经度, 纬度, 连接数]
]
},
{
type: 'lines', // 连线(显示流量方向)
data: [
{ coords: [[116.4, 39.9], [-74.0, 40.7]] } // 北京 → 纽约
]
}
]
}
```
#### GeoIP数据库
- **数据源**: MaxMind GeoLite2 City数据库
- **精度**: 国家级99%, 城市级80%
- **更新频率**: 每月更新
- **文件路径**: `data/GeoLite2-City.mmdb`
---
### 1️⃣1️⃣ 3D地球 (3D Globe Visualization)
#### 功能描述
基于ECharts GL的3D地球流量可视化,提供更炫酷的大屏展示效果。
#### 核心功能
| 功能点 | 说明 |
|-------|------|
| **3D渲染** | 基于WebGL的真实地球渲染 |
| **流线效果** | 显示数据流动轨迹的3D流线 |
| **散点模式** | 显示全球IP分布的3D散点 |
| **混合模式** | 同时显示散点+流线 |
| **自动旋转** | 地球自动旋转展示全球视角 |
| **视角切换** | 支持手动拖拽调整视角 |
#### 可视化模式
| 模式 | 说明 | 适用场景 |
|-----|------|---------|
| **流线模式** (默认) | 显示数据流动轨迹的弧线 | 大屏展示、动态效果 |
| **散点模式** | 显示全球IP位置的点 | 地理分布分析 |
| **混合模式** | 同时显示流线+散点 | 全面展示 |
#### 技术实现
```typescript
// 3D地球配置 (ECharts GL)
{
globe: {
baseTexture: 'earth.jpg', // 地球纹理
heightTexture: 'elevation.jpg', // 高度纹理
displacementScale: 0.05, // 地形起伏
shading: 'realistic', // 逼真光照
atmosphere: {
show: true, // 大气层效果
},
light: {
ambient: { intensity: 0.4 }, // 环境光
main: { intensity: 1.0 } // 主光源
}
},
series: [
{
type: 'lines3D', // 3D流线
coordinateSystem: 'globe',
effect: {
show: true,
trailLength: 0.5, // 尾迹长度
trailWidth: 2, // 尾迹宽度
trailOpacity: 0.8
}
}
]
}
```
#### 性能优化
- **LOD(Level of Detail)**: 根据距离调整渲染精度
- **数据采样**: 连接数过多时自动采样TOP N条
- **帧率控制**: 限制最大帧率为60fps
- **GPU加速**: 充分利用WebGL硬件加速
#### 用户交互
- 🖱️ **鼠标拖拽**: 旋转地球
- 🔍 **滚轮缩放**: 放大/缩小
- ⏸️ **暂停旋转**: 鼠标悬停时暂停自动旋转
- 📊 **点击查看**: 点击流线查看详细信息
---
### 1️⃣2️⃣ 设置 (Settings)
#### 功能描述
系统配置管理,包括抓包参数、告警规则、性能优化等设置。
#### 核心功能
| 模块 | 说明 |
|-----|------|
| **网卡设置** | 选择抓包网卡、设置BPF过滤器 |
| **存储设置** | 设置数据库路径、PCAP保存策略 |
| **性能设置** | 调整内存限制、刷新频率 |
| **告警设置** | 启用/禁用规则、调整告警级别 |
| **GeoIP设置** | 配置GeoIP数据库路径 |
| **导入/导出** | 导入自定义规则、导出配置 |
#### 配置文件
```yaml
# config.yaml
capture:
device: "eth0" # 抓包网卡
bpf_filter: "tcp or udp" # BPF过滤器
promiscuous: true # 混杂模式
snaplen: 65535 # 捕获长度
storage:
db_path: "./data/sniffer.db" # SQLite数据库路径
pcap_dir: "./data/pcap" # PCAP保存目录
pcap_rotation: "1h" # PCAP轮转周期
retention_days: 7 # 数据保留天数
performance:
ring_buffer_size: 10000 # 环形缓冲区大小
batch_insert_size: 100 # 批量插入大小
refresh_interval: 2000 # 前端刷新间隔(毫秒)
alert:
enabled: true # 启用告警
min_level: "warning" # 最低告警级别
notification: true # 桌面通知
geoip:
db_path: "./data/GeoLite2-City.mmdb" # GeoIP数据库路径
```
#### 高级设置
- **调试模式**: 启用详细日志输出
- **导出格式**: 选择JSON/CSV/PCAP导出格式
- **主题切换**: 深色/浅色主题切换
- **语言设置**: 中文/英文界面语言
---
## 🚀 快速开始
### 安装依赖
**Windows:**
```powershell
# 安装Npcap (https://npcap.com/)
winget install Npcap.Npcap
# 安装Go 1.22+
winget install GoLang.Go
# 安装Node.js 18+
winget install OpenJS.NodeJS
```
**Linux:**
```bash
# 安装libpcap
sudo apt install libpcap-dev # Debian/Ubuntu
sudo yum install libpcap-devel # RedHat/CentOS
# 安装Go 1.22+
wget https://go.dev/dl/go1.22.0.linux-amd64.tar.gz
sudo tar -C /usr/local -xzf go1.22.0.linux-amd64.tar.gz
# 安装Node.js 18+
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
```
**macOS:**
```bash
# 安装libpcap (macOS自带)
brew install libpcap
# 安装Go和Node
brew install go node
```
### 构建运行
```bash
# 克隆仓库
git clone https://github.com/your-repo/fastmonitor.git
cd fastmonitor
# 安装前端依赖
cd frontend && npm install && cd ..
# 运行开发模式
wails dev
# 构建生产版本
wails build
```
### 首次启动
1. **以管理员权限运行** (必需)
- Windows: 右键 → "以管理员身份运行"
- Linux/macOS: `sudo ./fastmonitor`
2. **选择网卡** → 点击"设置" → 选择活跃网卡
3. **开始抓包** → 点击顶部"开始捕获"按钮
4. **查看仪表盘** → 实时查看流量统计和图表
---
## 🛠️ 技术栈
### 后端
- **语言**: Go 1.22
- **框架**: Wails v2.10
- **抓包**: gopacket + libpcap
- **数据库**: SQLite 3
- **GeoIP**: MaxMind GeoLite2
### 前端
- **语言**: TypeScript 5.3
- **框架**: Vue 3.4
- **UI库**: Element Plus 2.5
- **状态管理**: Pinia 2.1
- **路由**: Vue Router 4.2
- **图表**: ECharts 5.6 + ECharts GL 2.0
---
## 🤝 贡献指南
欢迎提交Issue和Pull Request!
1. Fork本仓库
2. 创建特性分支 (`git checkout -b feature/amazing-feature`)
3. 提交更改 (`git commit -m 'Add amazing feature'`)
4. 推送到分支 (`git push origin feature/amazing-feature`)
5. 创建Pull Request
---
## 📧 联系方式
- **项目主页**: https://github.com/vam876/FastMonitor
- **问题反馈**: https://github.com/vam876/FastMonitor/issues
---
## 🙏 致谢
- [Wails](https://wails.io/) - 跨平台桌面应用框架
- [gopacket](https://github.com/google/gopacket) - Go数据包处理库
- [ECharts](https://echarts.apache.org/) - 数据可视化图表库
- [Element Plus](https://element-plus.org/) - Vue 3 UI组件库
- [MaxMind](https://www.maxmind.com/) - GeoIP地理位置数据库
---
**FastMonitor** - 让网络流量监控更简单、更高效、更智能! 🚀
**备注:** - wails框架练手项目,开发周期2天,BUG较多,仅供试用。