# 天璇 (TianXuan) — TLS 流数据分析与实体画像系统 基于 Polars + scikit-learn + Three.js 的 TLS 流数据分析工具链。支持 CSV 批量导入、自动实体检测、多维聚合、聚类分析、特征提取、**3D 地球流量可视化**。提供 Django Web 操作界面和 MCP 协议接口,支持 32B 大语言模型编排分析流程。**全离线运行**,所有 JS 库/地图贴图/GeoIP 数据库均已内嵌。 ## TlsDB.csv — 参考表头名清单 `TlsDB.csv` 是 TLS 流量数据的**参考表头名清单**,包含常见的列名、含义和数据类型对照表。 **此文件为参考对照表,非实际数据文件。** 实际 CSV 文件的列名可能与表头名不同,分析工具会自动匹配。 --- ## 目录 1. [系统概述](#1-系统概述) 2. [快速开始](#2-快速开始) 3. [用户指南](#3-用户指南) 4. [页面功能说明](#4-页面功能说明) 5. [CLI 管道](#5-cli-管道) 6. [MCP 工具文档](#6-mcp-工具文档) 7. [测试](#7-测试) 8. [项目结构](#8-项目结构) 9. [常见问题](#9-常见问题) --- ## 1. 系统概述 ### 1.1 解决的问题 企业网络中 TLS 流量通常以 CSV 形式导出(每行一条流记录),数据量大、列名不统一、缺乏标签。本系统提供一条从原始 CSV 到实体画像的自动化分析流水线: ``` CSV 文件 → 上传/加载 → 自动检测实体列 → 按实体聚合特征 → 实体级聚类 → 提取每簇区分特征 → Web 可视化 / MCP 接口 ``` ### 1.2 核心能力 | 模块 | 功能说明 | |------|---------| | **数据加载** | 多文件合并、BOM 自动检测、跨文件 schema 容错、递归 `**/*.csv`、中文路径支持 | | **实体检测** | 基于列名关键词 + 唯一值比率 + 数据类型的三维打分,自动推荐实体列(如 `src_ip`、`sni`、`user`) | | **实体聚合** | 按实体分组计算流统计、目标多样性、TLS 特征、协议特征、时间模式、地理位置(经纬度) | | **IP 子网聚合** | 支持 /24 和 /28 子网掩码,同一子网下所有 IP 合并为一个实体节点 | | **多列复合键** | 支持 `(src_ip, dst_ip)` 等多列组合作为实体标识 | | **聚类分析** | HDBSCAN(自动确定簇数)/ KMeans,零样本自动降级,Silhouette / Davies-Bouldin 质量评估 | | **特征提取** | Z-Score / ANOVA 方法计算每个聚类的区分性特征 | | **3D 地球** | 基于 Three.js 的 TLS 流量弧线可视化,多数据源叠加,经纬线网格,国境线轮廓 | | **地理可视化** | PCA 散点图 + Canvas 原生渲染(无外部 JS 依赖) | | **LLM 集成** | OpenAI 兼容 API、LLM 自动编排分析流程(profile → 实体 → 聚类 → 特征) | | **Web 界面** | CSV 上传拖拽、手动分步分析向导、LLM 自动分析、配置管理、运行记录查看 | | **MCP 协议** | 12 个 JSON-RPC 工具,供外部 LLM 编排调用 | | **便携运行时** | 项目内置 Python 3.12 运行时(593MB),零系统依赖,`run.bat` 双击即用 | ### 1.3 技术栈 | 组件 | 技术选型 | |------|---------| | **后端框架** | Django 4.2 (SQLite WAL) | | **数据处理** | Polars 1.42.1 (LazyFrame 延迟计算 + streaming) | | **机器学习** | scikit-learn (StandardScaler, HDBSCAN, KMeans, PCA) | | **MCP 协议** | Python MCP SDK (stdio 传输) | | **前端 3D** | Three.js (603KB, 离线) | | **前端图表** | 纯 Canvas 2D API 原生绘制 | | **配置** | Pydantic + YAML | | **LLM 接口** | OpenAI chat/completions 兼容 API | | **运行时** | 嵌入式 Python 3.12 (Win7 兼容版 adang1345) | --- ## 2. 快速开始 ### 2.1 用户模式(无需预装 Python) ```bat 1. 解压项目文件夹到任意目录 2. 双击 run.bat 3. 等待命令行显示 "Starting TianXuan..." 4. 浏览器自动打开 http://127.0.0.1:8000/ 5. 点击「上传数据」→ 选择 CSV 文件 → 上传 → 等待预处理完成 6. 进入「手动分析」→ 选择数据集 → 配置参数 → 运行分析 7. 查看结果:聚类概览、簇详情、实体画像、地球分布图 ``` ### 2.2 开发者模式 ```bash # 初始化数据库 runtime\python\python.exe manage.py migrate # 生成测试数据 runtime\python\python.exe scripts\gen_test_data.py --rows 1000 # 启动开发服务器 runtime\python\python.exe manage.py runserver # 浏览器打开 http://127.0.0.1:8000/ ``` ### 2.3 脚本一览 | 脚本 | 功能 | |------|------| | `run.bat` | 启动 Django Web 界面(:8000),自动打开浏览器 | | `shell.bat` | 打开 Django Shell(Python 交互式环境) | ### 2.4 一键分析管道 ```bash # 加载 CSV → 自动检测实体 → 聚合 → 聚类 → 特征提取 → 写入数据库 runtime\python\python.exe manage.py run_pipeline "data/input.csv" # 指定聚类算法 runtime\python\python.exe manage.py run_pipeline "data/*.csv" --algo kmeans # 手动指定实体列(跳过自动检测) runtime\python\python.exe manage.py run_pipeline "data/*.csv" --entity-col src_ip # 导出结果 runtime\python\python.exe manage.py run_pipeline "data/*.csv" --output ./results/ ``` 输出示例: ``` [1/5] 加载 CSV: data/test_flows.csv → 500 rows, 1 files, 0.2 MB [2/5] 检测实体列 → 自动检测: src_ip (共 6 候选) [3/5] 实体聚合 → 50 个实体, 18 维特征 [4/5] 聚类 (hdbscan) → 2 个簇, 噪声比 0.24, Silhouette: 0.2557 [5/5] 特征提取 → 30 个特征已保存到数据库 *** 分析完成! Run ID: #1 ``` --- ## 3. 用户指南 ### 3.1 上传数据 1. 点击导航栏「上传数据」 2. 拖拽 CSV 文件到虚线区域,或点击选择文件 3. 支持多文件上传,自动拼接相同 schema 的文件 4. 支持 `schema_strict=false` 模式(默认):不同列名的文件会自动合并,缺失列填 null 5. 支持 `.zip` 压缩包自动解压 6. 上传后自动在后台进行预处理(加载 → 检测实体列 → 聚合),完成后状态变为 `ready` 7. 进度条实时显示处理状态 **数据格式要求**: - 每行一条 TLS 流记录 - 建议包含列:`src_ip`、`dst_ip`、`proto`、`bytes_sent`、`bytes_rev`、`duration`、`packets` 等 - 可选地理列:`latitude` / `lat` / `y` 和 `longitude` / `lon` / `lng` / `x`(自动识别) - 可选时间列:`timestamp` / `ts` / `time`(自动识别) ### 3.2 手动分析 3 步向导完成分析: **Step 1 - 选择数据集**:从已预处理完成的数据集中选择一个(显示行数、已检测的实体列) **Step 2 - 配置参数**: - 聚类算法:HDBSCAN(自动确定簇数,推荐)/ KMeans(需预设 k 值) - 最小簇大小(min_cluster_size):默认 5,数据不足时自动降级 **Step 3 - 确认运行**:回顾配置,点击「开始分析」。后台自动完成聚类 + 特征提取,完成后跳转到结果页。 ### 3.3 LLM 自动分析 需要先在「配置」页面设置 LLM 的 base_url 和 API Key: 1. 进入「LLM 分析」页面 2. 选择一个已预处理的数据集 3. 点击「开始自动分析」 4. 后端 LLM 编排器会自动调用 profile → build_entity_profiles → run_clustering → extract_features 5. 进度条实时显示当前步骤 ### 3.4 查看结果 #### 运行详情页 - 总流数、实体数、簇数 摘要卡片 - 簇列表:每个簇的大小、占比、Silhouette 分数 #### 聚类概览页 - **PCA 散点图**:实体在二维主成分空间中的分布,颜色区分聚类 - **地理分布图**:实体在地理坐标上的分布(需 CSV 包含经纬度列),支持缺失值 - 每个簇的详情卡片:Top 5 区分特征 #### 簇详情页 - 特征表:每列的均值、标准差、中位数、区分度分数(Top 50) - 实体列表:该簇包含的实体(Top 50),可点击查看详情 #### 实体画像页 - 实体标识、所属簇 - 聚合特征值和相对簇均值的偏离(Z-score) - 偏差显著的特征以颜色高亮(|Z| > 2) #### 3D 地球页 - Three.js 3D 地球,TLS 流量弧线连接源目 IP - 弧线颜色标识 TLS 版本(TLSv1.3 蓝 / v1.2 粉 / 其他青) - 鼠标拖拽旋转、滚轮缩放 - 经纬线网格 + 国境线轮廓 - 多数据源叠加复选框 - 脉冲光点动画(背面剔除) --- ## 4. 页面功能说明 | 页面 | 路由 | 功能 | |------|------|------| | **首页** | `/` | 最近运行记录概览 | | **上传数据** | `/upload/` | 拖拽上传 CSV,自动预处理 | | **手动分析** | `/analyze/manual/` | 3 步向导:选数据→设参数→运行 | | **LLM 分析** | `/analyze/auto/` | LLM 自动编排分析流程 | | **运行记录** | `/runs/` | 所有分析运行列表 | | **运行详情** | `/runs//` | 单次运行摘要 + 簇列表 | | **聚类概览** | `/clusters//` | PCA 散点图 + 每簇区分特征 | | **簇详情** | `/clusters//