Netspy-上下文网络遥测分析仪
一个统一的CLI工具,提供MCP(模型上下文协议)服务器功能,用于实时网络连接分析,具有AI驱动的洞察力和OpenAI函数调用集成。
🚀 特性
核心能力
- 实时网络监控:跟踪连接尝试、模式和数据包丢失
- 过程特定分析:按PID或进程名称查询
- AI驱动的洞察:使用上下文工具编排的高级OpenAI函数调用
- 交互式和程序化:同时提供CLI和API接口
- 多种输出模式:总结、详细列表、模式分析和人工智能见解
AI集成亮点
- OpenAI函数调用:LLM自动选择并链接多个分析工具
- 上下文工具编排:基于查询上下文的动态工具选择
- 综合分析:多工具数据综合,以获得可操作的见解
- 自然语言查询:用简单的英语问有关网络行为的问题
🏗️ 建筑
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ netspy CLI │───▶│ MCP Server │───▶│ eBPF Server │
│ (MCP Client) │ │ (Internal) │ │ (HTTP API) │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│
▼
┌─────────────────┐
│ OpenAI API │
│ (Function │
│ Calling) │
└─────────────────┘函数调用流程
User Query → Conversation Manager → OpenAI API → Function Calls → MCP Tools → Results → Final Response- 用户输入:关于网络行为的自然语言查询
- OpenAI处理:LLM分析查询并确定所需的工具
- 函数调用:系统使用经过验证的参数执行适当的MCP工具
- 结果集成:工具输出反馈给LLM
- 最终响应:基于真实数据的综合分析
📋 先决条件
- eBPF网络监控服务器:构建自 ebpf服务器存储库
git clone git@github.com:SRodi/ebpf-server.git
cd ebpf-server
make build # Compiles both Go code AND eBPF programs- 根权限:服务器上的eBPF操作需要
- OpenAI API密钥:AI见解所需(集
OPENAI_API_KEY环境变量)
export OPENAI_API_KEY=your_openai_api_key_here🛠️ 安装
go build -o netspy ./cmd/netspy🎯 快速开始
# 1. Start the eBPF API server (run once and keep running)
cd /path/to/ebpf-server
sudo ./bin/ebpf-server --http --port 8080
# 2. Set OpenAI API key
export OPENAI_API_KEY=your_key_here
# 3. Generate some network traffic
curl -s http://google.com
# 4. Use contextual analysis
./netspy
netspy-mcp> contextual "analyze my system"💬 使用示例
情境分析(推荐)
AI驱动的分析会自动选择并链接多个工具:
# Interactive mode with contextual analysis
./netspy
netspy-mcp> contextual "What's happening with my network connections?"
netspy-mcp> contextual "Are there any packet drops or connection issues?"
netspy-mcp> contextual "Analyze the network behavior of process nginx"
# Command line mode
./netspy --tool contextual_analysis --query "Analyze my network activity"
./netspy --tool contextual_analysis --query "How is curl behaving?" --process curl传统工具命令
# Interactive mode
./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 made 5 connections in 60 seconds"
# Single command mode
./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:详细的丢包事件
- 分析模式:连接模式分析和行为洞察
AI驱动的工具
- 情境分析:具有自动工具选择功能的高级AI分析
- ai_景点:从提供的摘要文本中生成见解
📊 样本输出
智能分析
### Contextual Analysis
netspy-mcp> contextual "analyze my system"
### Comprehensive Network Analysis
1. **Network Summary**:
- Over the last 60 seconds, there were **10 outbound connection attempts** recorded.
2. **Detailed Connection Events**:
- A total of **29 connection events** were logged recently.
- Notable connections include:
- **10 connections** to `127.0.0.1:8080` by the process `netspy`.
- Additional connections to DNS servers and local processes.
3. **Packet Drops**:
- There have been **3 packet drops** across all processes in the last 60 seconds.
4. **Connection Patterns**:
- **Top Destinations**: Local connections dominate with 8 connections to `:0`
- **Protocols Used**: Predominantly TCP (9 connections) and UDP (12 connections)
### Insights & Recommendations:
- **Monitor `netspy`**: Heavy localhost usage detected
- **Investigate Packet Drops**: Monitor for recurring losses
- **Consider Network Capacity**: Optimize settings if under heavy load
- **Regular Monitoring**: Implement ongoing monitoring for these metrics传统命令
netspy-mcp> summary --process curl
Process 'curl' made 5 outbound connection attempts over the last 60 seconds
netspy-mcp> list --max-events 5
Recent connection events (15 total):
21:05:53 | 127.0.0.1:8080 | TCP | netspy
21:03:38 | (local socket) | UNIX | snapd
21:01:08 | (local socket) | 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(整数):要分析的进程IDprocess_name(string):要分析的进程名称duration(整数,默认值:60):分析持续时间(秒)max_events(整数,默认值:10):要返回的最大事件数
AI功能:
query(字符串,contextual_analysis需要):自然语言查询summary_text(字符串,ai_insights需要):要分析的摘要文本
关键改进
- 无工具上下文集成 → 实时工具访问
- ✅ LLM可以通过函数调用直接访问实时网络数据
- 缺少函数调用 → 完全支持OpenAI功能
- ✅ 正确的OpenAI函数调用和参数验证 - ✅ 所有7个注册为OpenAI功能的MCP工具
- 静态方法 → 动态工具使用
- ✅ LLM根据上下文选择和链接多个工具 - ✅ 演示: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密钥是否有效并具有足够的信用
- 如果遇到频繁故障,请检查速率限制
“打开bpf/connection.o:没有这样的文件或目录”
- 使用构建服务器
make build在ebpf服务器存储库中 - 服务器需要编译的eBPF程序,而不仅仅是Go二进制
👨💻 开发人员使用情况
MCP集成
import "github.com/srodi/netspy/internal/mcp"
// Create MCP client with embedded server
mcpClient := mcp.NewMCPClient("http://localhost:8080", true)
// Start interactive mode
ctx := context.Background()
err := mcpClient.StartInteractiveMode(ctx)
// Or execute single command
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"
// Create contextual network analyst
analyst := openai.NewContextualNetworkAnalyst(mcpExecutor)
// Analyze with natural language
analysis, err := analyst.AnalyzeNetworkQuery(ctx, "What's happening with my network?")
// Process-specific analysis
analysis, err := analyst.AnalyzeProcess(ctx, "nginx", 0, 60)🏗️ 建筑细部
核心组件
- 功能调用管理器 (
internal/openai/functions.go)
- 自动MCP工具发现和注册 - OpenAI函数定义生成 - 参数验证和类型转换 - 函数执行错误处理
- 会话管理器 (
internal/openai/client.go)
- 多回合对话管理 - 自动功能调用检测和执行 - 工具结果集成回对话 - 使用 gpt-4o-mini 用于最佳函数调用
- 智能网络分析师 (
internal/openai/analyst.go)
- 上下文感知查询处理 - 自动工具选择和链接 - 专业网络分析提示 - 对话历史管理
- MCP服务器 (
internal/mcp/server.go)
- 模型上下文协议实现 - 工具注册和执行 - 与eBPF服务器的HTTP通信
🔮 未来的增强功能
该架构支持轻松扩展:
- 其他MCP工具(自动发现)
- 自定义分析工作流
- 不同的AI模型提供商
- 流媒体响应
- 函数调用缓存
- 多模式输入(图像、文件)
🚀 演出
- 函数调用延迟:亚秒级工具执行
- 工具覆盖范围:LLM可使用100%的MCP工具
- 模型效率:使用
gpt-4o-mini用于最佳函数调用 - 零代码重复:自动工具发现消除了重复定义
📜 许可证
该项目是网络遥测生态系统的一部分,与 ebpf服务器 全面的网络监控能力。
