Files
tianxuan/CLAUDE.md
T
TianXuan Developer 829729943c feat: 社区交互增强 + 卫星地图 + 节点/边数据丰富 + 项目清理
核心改进:
- 节点数据丰富: TLS版本/加密套件/SNI/端口/流量统计/连接成功率
- 边数据丰富: 包数/持续时间/TLS/端口/SNI/分类标签
- 新增 edge_time_series 端点: 边流量时序图(北京时间)
- 新增 cluster_nodes_edges 端点: 社区聚焦(zoom+高亮+专属边)
- 社区点击: 自动缩放/高亮节点/显示社区边(可点击)
- 边交互修复: 事件从layerGroup移至hitPoly,三处边渲染全修复
- 地图升级: ESRI卫星影像 + 255国矢量边界叠加
- 离线回退: 卫星→CartoDB→暗色矢量地图,完整可用
- 节点面板: 删除无意义社区标签,移至Host+组织同行
- sanitizeName: 清理5个非ASCII国家名避免乱码
- .gitignore: 补充geoip_chunks/和嵌套CSV规则

项目清理:
- 删除 logs/ (20个调试文件,~2.5MB)
- 删除 test_*.py (4个临时测试脚本)
- 删除 _check_bool/_pipeline_test/_restart_server/start_server (硬编码路径)
- 删除 node_modules/package.json/package-lock.json (18MB,不用Node)
- 删除 tests/ 旧日志和调试脚本
- 删除 .pytest_cache/ .server_pid.txt RUNTIME_CHANGED.txt
- AGENTS.md → CLAUDE.md

Co-Authored-By: Claude <noreply@anthropic.com>
2026-07-24 13:06:14 +08:00

100 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
CLAUDE.md — 天璇 (TianXuan) 系统
项目概览
天璇 是一个 TLS 加密流量数据分析与实体画像系统,基于 Django + Polars + scikit-learn + Three.js 构建,支持从 CSV 导入、实体检测、聚合、聚类、特征提取到 3D 可视化的全自动离线分析流水线。
- 版本: v2.0.0beta
- 运行方式: 离线桌面应用,内置 Python 3.12 运行时,双击 run.bat 即可启动,无需安装任何依赖。
- 数据存储: SQLite (WAL 模式) + 内存缓存
- 分支策略: 后续所有改动直接提交到 main 分支,并推送到远程仓库 https://gitea.cattysteve.top/HJQ/tianxuan。
核心模块
| 模块 | 功能 |
|------|------|
| analysis/data_loader.py | CSV 加载、合并、列名规范化、GeoIP 解析 |
| analysis/entity_detector.py | 基于列名关键词和唯一值比率的实体列自动检测 |
| analysis/entity_aggregator.py | 按实体分组计算流量统计、TLS特征、时间模式等 |
| analysis/tool_registry.py | 12 个 MCP 工具注册(145KB |
| simple_analysis/ | 新增的“简单分析”模块,独立 Django App,提供上传→筛选→聚类→地图可视化一站式工作流 |
| templates/ | 传统功能页面(仪表盘、上传、手动分析、LLM分析、3D地球等) |
| data/ | 离线 GeoIP 数据库 (GeoLite2-City.mmdb、GeoLite2-ASN.mmdb)、自定义 IP 数据 geoip_data.txt |
项目结构要点
天璇/
├── analysis/ # 主分析 App
├── simple_analysis/ # 简单分析 App (新增)
│ ├── views.py # API 视图 (upload, filter, cluster, edges)
│ ├── urls.py # 路由 /simple/
│ ├── templates/simple_analysis/
│ │ └── simple_analysis.html # 单页应用
│ └── static/
├── config/
│ ├── config.yaml # 全局配置(含 API Key、参数)
│ └── loader.py
├── data/
│ ├── GeoLite2-City.mmdb # 130MB,城市级 GeoIP
│ ├── GeoLite2-ASN.mmdb # 9.5MBASN 数据库
│ └── geoip_data.txt # 补充 IP 地理位置
├── runtime/python/ # 嵌入式 Python 3.12 运行时
├── db.sqlite3 # 主数据库
├── main.py / manage.py
└── run.bat
当前开发焦点:简单分析模块 (v3)
目标:构建一个完全离线、高性能的网络流量 IP 通信社区发现与可视化工具。
工作流(4 步):
1. 上传与预筛选:拖拽上传 CSV,支持高级筛选器(AND/OR/NOT 树状表达式),上传时立即过滤以减少内存占用。
2. 高级手动筛选:可视化布尔表达式编辑器,对已加载数据进一步精筛。
3. 网络聚类:基于 IP 通信图进行社区发现:
- 提取所有唯一 :ips / :ipd 作为节点。
- 先按 /24 子网分组,子网内部使用 HDBSCAN (haversine 距离) 二次聚类。
- 最终每个节点(IP)获得一个 cluster_id。
4. 地图可视化与交互:
- 离线地图:使用 Leaflet + 离线瓦片缓存(leaflet-offline),无网络时回退到本地低级别瓦片。
- 节点按簇着色,支持 Canvas 渲染器和聚类插件优化性能。
- 点击节点展示:IP、运营商、组织、城市、关联对端IP、host/text 等。
- 点击边(IP 间连线)展示:通信次数、总流量、首次/末次北京时间、时间规律。
- 导出点表/边表 CSV。
重要技术约定
- 列名规范化:所有 CSV 列名通过 normalize_columns() 处理成小写+下划线格式,内部使用标准列名(如 src_ip, dst_ip, cnam 等)。
- GeoIP:完全抛弃 CSV 中自带经纬度(:ips.latd 等),所有坐标均使用离线 GeoLite2-City.mmdb 解析。
- 时间处理:原始时间戳/时间列统一转为北京时间 (UTC+8) 展示。
- 内存管理:上传后的数据保存在内存缓存(_cache dict),以 session_id12位 hex)索引,无持久化。
- 性能要求:i7-10700 + 8GB RAM,十万级 IP 节点需在 1 分钟内完成聚类,内存占用 <2GB。
前端注意事项
- 所有静态资源(Leaflet, Chart.js, Three.js 等)必须本地托管,确保离线可用。
- 地图瓦片离线方案必须实现:在线时缓存 OSM 瓦片到 IndexedDB,离线时使用缓存或内置低级别瓦片。
- 按钮必须防重复点击,操作栏固定在顶部,调试信息面板实时显示。
- 需修复 Cannot set properties of null 类 DOM 操作错误。
API 端点 (简单分析)
| 方法 | 路径 | 作用 |
|------|------|------|
| GET | /simple/ | 主页面 |
| POST | /simple/upload/ | 上传文件 + 预设筛选 + GeoIP 解析 |
| POST | /simple/filter/advanced/ | 树状高级筛选 |
| GET | /simple/column-values/ | 列 Top 50 唯一值(供下拉菜单) |
| POST | /simple/cluster/ | 执行网络聚类 |
| GET | /simple/cluster/<label>/ | 簇详情 |
| POST | /simple/edges/ | 获取边关系 |
已知问题与待办
- [ ] 离线地图瓦片缓存机制完善(目前仅低级别内置)。
- [ ] 边渲染时坐标查找需使用节点真实坐标,而非簇中心近似。
- [ ] 大数据量时地图标记性能优化(可换用 WebGL 渲染器)。
- [ ] 预设筛选器与 Step 2 筛选器 UI 统一为同一个高级筛选组件。
开发命令
- 启动开发服务器:python manage.py runserver
- 运行测试:python manage.py test simple_analysis
- 生成要求:pip freeze > requirements.txt (注意剔除内部路径)
提交规范
- 直接提交到 main 分支,git push origin main。
- 提交信息格式:feat: xxx / fix: xxx / refactor: xxx,简要描述改动。
---
最后更新: 2026-07-24
维护者: 天璇开发团队