返回市场
网络监视器

网络监视器

作者:SRodi6 星标更新:2025-08-09

项目介绍

Netspy - 上下文网络遥测分析器

一个统一的命令行工具,提供MCP(模型上下文协议)服务器功能,用于实时网络连接分析,并结合AI驱动的洞察力和OpenAI函数调用集成。

演示

🚀 功能特性

核心能力

  • 实时网络监控:跟踪连接尝试、模式和数据包丢失
  • 进程特定分析:通过PID或进程名称查询
  • AI驱动的洞察力:高级OpenAI函数调用与上下文工具编排
  • 交互式及编程接口:同时支持CLI和API接口
  • 多种输出模式:概要、详细列表、模式分析和AI洞察

AI集成亮点

  • OpenAI函数调用:LLM自动选择并串联多个分析工具
  • 上下文工具编排:基于查询上下文动态选择工具
  • 全面分析:多工具数据综合生成可操作洞察
  • 自然语言查询:以纯英文提问关于网络行为的问题

🏗️ 架构

┌─────────────────┐    ┌─────────────────┐    ┌─────────────────┐
│   netspy CLI    │───▶│   MCP Server    │───▶│  eBPF Server    │
│  (MCP 客户端)   │    │  (内部)         │    │ (HTTP API)      │
└─────────────────┘    └─────────────────┘    └─────────────────┘
                              │
                              ▼
                       ┌─────────────────┐
                       │  OpenAI API     │
                       │   (函数调用)    │
                       └─────────────────┘

函数调用流程

用户查询 → 对话管理器 → OpenAI API → 函数调用 → MCP 工具 → 结果 → 最终响应
  1. 用户输入:关于网络行为的自然语言查询
  2. OpenAI处理:LLM分析查询并确定所需工具
  3. 函数调用:系统执行适当的MCP工具并验证参数
  4. 结果整合:工具输出反馈给LLM
  5. 最终响应:基于实际数据的全面分析

📋 先决条件

  1. eBPF网络监控服务器:从ebpf-server仓库构建

    git clone git@github.com:SRodi/ebpf-server.git
    cd ebpf-server
    make build  # 编译Go代码和eBPF程序
    
  2. root权限:服务器上进行eBPF操作所需的权限

  3. OpenAI API密钥:用于AI洞察(设置OPENAI_API_KEY环境变量)

    export OPENAI_API_KEY=your_openai_api_key_here
    

🛠️ 安装

go build -o netspy ./cmd/netspy

🎯 快速开始

# 1. 启动eBPF API服务器(运行一次并持续运行)
cd /path/to/ebpf-server
sudo ./bin/ebpf-server --http --port  8080

# 2. 设置OpenAI API密钥
export OPENAI_API_KEY=your_key_here

# 3. 生成一些网络流量
curl -s http://google.com

# 4. 使用上下文分析
./netspy
netspy-mcp> contextual "分析我的系统"

💬 使用示例

上下文分析(推荐)

AI驱动的分析自动选择并串联多个工具:

# 交互模式带上下文分析
./netspy
netspy-mcp> contextual "我的网络连接发生了什么?"
netspy-mcp> contextual "是否有数据包丢失或连接问题?"
netspy-mcp> contextual "分析nginx进程的网络行为"

# 命令行模式
./netspy --tool contextual_analysis --query "分析我的网络活动"
./netspy --tool contextual_analysis --query "curl的行为如何?" --process curl

传统工具命令

# 交互模式
./netspy
netspy-mcp> summary --pid 1234 --duration 120
netspy-mcp> list --process curl --max-events 20
netspy-mcp> analyze --process nginx
netspy-mcp> insights "curl在60秒内建立了5个连接"

# 单命令模式
./netspy --tool get_network_summary --pid 1234 --duration 120
./netspy --tool list_connections --process curl --max-events 15
./netspy --tool analyze_patterns --process ssh

🔧 可用工具

核心分析工具

  • get_network_summary:进程的聚合连接统计
  • list_connections:最近的网络连接事件过滤
  • get_packet_drop_summary:连接性问题的数据包丢失分析
  • list_packet_drops:详细的数据包丢失事件
  • analyze_patterns:连接模式分析和行为洞察

AI驱动工具

  • contextual_analysis:高级AI分析,自动选择工具
  • ai_insights:根据提供的摘要文本生成洞察

📊 示例输出

智能分析

### 上下文分析

netspy-mcp> contextual "分析我的系统"

### 综合网络分析

1. **网络概要**:
   - 在过去的60秒中,记录了**10次出站连接尝试**。

2. **详细连接事件**:
   - 近期总共记录了**29个连接事件**。
   - 显著的连接包括:
     - 进程`netspy`到`127.0.0.1:8080`的**10个连接**。
     - 至DNS服务器和本地进程的额外连接。

3. **数据包丢失**:
   - 在过去60秒内,所有进程中发生了**3次数据包丢失**。

4. **连接模式**:
   - **主要目的地**:本地连接占主导地位,有8个连接到`:0`
   - **使用的协议**:主要是TCP(9个连接)和UDP(12个连接)

### 洞察与建议:
- **监控`netspy`**:检测到大量本地使用
- **调查数据包丢失**:监测重复丢失
- **考虑网络容量**:如果负载重,请优化设置
- **定期监控**:实施这些指标的持续监控

传统命令

netspy-mcp> summary --process curl
进程`curl`在过去60秒内进行了5次出站连接尝试

netspy-mcp> list --max-events 5
最近的连接事件(共15个):
  21:05:53 | 127.0.0.1:8080 | TCP | netspy
  21:03:38 | (本地套接字) | UNIX | snapd
  21:01:08 | (本地套接字) | UNIX | snapd
  20:58:42 | 192.168.120.2:53 | UDP | systemd-resolve
  20:56:15 | 172.217.164.78:443 | TCP | curl

🎛️ 命令行选项

通用选项

  • --server URL:eBPF服务器URL(默认:http://localhost:8080)
  • --verbose:启用详细日志
  • --help:显示帮助信息

工具执行

  • --tool TOOL:运行特定的MCP工具并退出
    • 可用工具:get_network_summary, list_connections, get_packet_drop_summary, list_packet_drops, analyze_patterns, ai_insights, contextual_analysis

工具参数

  • --pid PID:要监控的进程ID
  • --process NAME:要监控的进程名
  • --duration SECONDS:分析时长(默认:60秒)
  • --max-events COUNT:要检索的最大事件数(默认:100)
  • --summary-text TEXT:供AI洞察的摘要文本
  • --query TEXT:上下文分析的自然语言查询

🤖 AI函数调用细节

工作原理

系统自动注册所有MCP工具作为OpenAI函数,使LLM能够:

  • 基于用户查询自动选择相关工具
  • 串联多个工具进行全面分析
  • 验证参数并优雅地处理错误
  • 跨交互维护对话上下文

函数参数

每个工具接受以下参数(除非特别指定,否则均为可选):

网络分析函数:

  • pid(整数):要分析的进程ID
  • process_name(字符串):要分析的进程名
  • duration(整数,默认:60):分析时长(秒)
  • max_events(整数,默认:10):返回的最大事件数

AI函数:

  • query(字符串,对于contextual_analysis是必需的):自然语言查询
  • summary_text(字符串,对于ai_insights是必需的):要分析的摘要文本

关键改进

  1. 无工具上下文集成实时工具访问

    • ✅ LLM通过函数调用直接访问实时网络数据
  2. 缺少函数调用完整的OpenAI函数支持

    • ✅ 正确的OpenAI函数调用和参数验证
    • ✅ 所有7个MCP工具注册为OpenAI函数
  3. 静态方法动态工具使用

    • ✅ LLM根据上下文选择并串联多个工具
    • ✅ 展示:自动使用4个工具进行系统分析
  4. 有限上下文结构化上下文管理

    • ✅ 多轮对话,完全保留上下文

🔧 故障排除

“连接被拒绝”或连接失败

  • 确保eBPF API服务器正在运行,使用--http --port 8080
  • 测试服务器健康状况:curl http://localhost:8080/health
  • 检查是否没有其他服务占用8080端口

“未找到连接”当服务器有数据时

  • 确保eBPF API服务器正在运行并生成数据
  • 生成一些流量:curl -s http://google.com
  • 使用netstat -tlnp | grep 8080验证服务器是否监听

“权限被拒绝”

  • 使用sudo启动eBPF服务器 - eBPF操作需要root权限
  • 当使用HTTP API模式时,netspy客户端可以不使用sudo运行

OpenAI API错误

  • 检查OPENAI_API_KEY环境变量是否已设置
  • 验证API密钥有效且有足够的信用额度
  • 如果频繁失败,检查速率限制

“open bpf/connection.o: no such file or directory”

  • 在ebpf-server仓库中使用make build构建服务器
  • 服务器需要编译的eBPF程序,而不仅仅是Go二进制文件

👨‍💻 开发者使用

MCP集成

import "github.com/srodi/netspy/internal/mcp"

// 创建带有嵌入服务器的MCP客户端
mcpClient := mcp.NewMCPClient("http://localhost:8080", true)

// 启动交互模式
ctx := context.Background()
err := mcpClient.StartInteractiveMode(ctx)

// 或执行单个命令
arguments := map[string]any{
    "pid": 1234,
    "duration": 120,
}
result, err := mcpClient.RunSingleCommand(ctx, "get_network_summary", arguments)

OpenAI集成

import "github.com/srodi/netspy/internal/openai"

// 创建上下文网络分析师
analyst := openai.NewContextualNetworkAnalyst(mcpExecutor)

// 使用自然语言分析
analysis, err := analyst.AnalyzeNetworkQuery(ctx, "我的网络发生了什么?")

// 特定进程分析
analysis, err := analyst.AnalyzeProcess(ctx, "nginx", 0, 60)

🏗️ 架构细节

核心组件

  1. 函数调用管理器internal/openai/functions.go

    • 自动发现和注册MCP工具
    • 生成OpenAI函数定义
    • 参数验证和类型转换
    • 函数执行错误处理
  2. 对话管理器internal/openai/client.go

    • 多轮对话管理
    • 自动函数调用检测和执行
    • 将工具结果整合回对话
    • 使用gpt-4o-mini进行最佳函数调用
  3. 智能网络分析师internal/openai/analyst.go

    • 上下文感知查询处理
    • 自动工具选择和串联
    • 专门的网络分析提示
    • 对话历史管理
  4. MCP服务器internal/mcp/server.go

    • 实现模型上下文协议
    • 工具注册和执行
    • 与eBPF服务器的HTTP通信

🔮 未来增强

架构支持轻松扩展:

  • 额外的MCP工具(自动发现)
  • 自定义分析工作流
  • 不同的AI模型提供商
  • 流式响应
  • 函数调用缓存
  • 多模态输入(图像、文件)

🚀 性能

  • 函数调用延迟:亚秒级工具执行
  • 工具覆盖率:100%的MCP工具可供LLM使用
  • 模型效率:使用gpt-4o-mini进行最佳函数调用
  • 零代码重复:自动工具发现消除了重复定义

📜 许可

该项目是网络遥测生态系统的一部分,并与ebpf-server集成,以实现全面的网络监控能力。