# datastream **Repository Path**: liang007/datastream ## Basic Information - **Project Name**: datastream - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-09-15 - **Last Updated**: 2026-09-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Datastream 基于 Spring Boot 的网络数据流分析平台,用于 DPI(深度包检测)数据处理、网络流量分析、路由拓扑可视化和协议解析还原。 ## 技术栈 | 分层 | 技术 | |------|------| | 核心框架 | Spring Boot 2.7.18 | | 语言 | Java 17 / Kotlin 1.9.21 | | ORM | MyBatis-Plus 3.5.4.1 | | 数据库 | PostgreSQL | | 搜索引擎 | Elasticsearch 7.x | | 缓存 | Redis (Lettuce) | | 对象存储 | MinIO (AWS S3 SDK) | | 配置中心 | Apollo 2.1.0 | | API文档 | Knife4j (OpenAPI 3.0) | | 工具库 | Hutool 5.8, FastJSON 1.2, EasyExcel 3.3, Lombok | | 网络工具 | Commons-Net 3.10 (FTP), JSch 0.1.55 (SFTP) | | IP地理定位 | ip2region 3.3.4, MaxMind GeoIP2 2.12 | ## 项目结构 ``` src/main/java/com/fritt/datastream/ ├── DatastreamApplication.java # 启动类 ├── aop/ # AOP 切面(调试日志、下载日志) │ └── annotation/ # 自定义注解 ├── common/ # 公共类 │ ├── exception/ # 全局异常处理 │ ├── util/ # 工具类(SFTP、SSH、ZIP、JSON、日期等) │ ├── BaseManager.java # 通用 Manager 接口 │ └── BaseResult.java / Result.java # 统一响应模型 ├── config/ # 配置类(MinIO、Redis、MyBatis-Plus、线程池、Apollo等) ├── controller/ # REST 控制器(17个模块) ├── dao/mapper/ # MyBatis-Plus Mapper ├── handler/ # 类型处理器(如 Int2Boolean) ├── listener/ # Apollo 配置变更监听器 ├── manager/ # 数据访问管理层 + impl ├── model/ │ ├── entity/ # 数据库实体(30+张表) │ ├── dto/ # 数据传输对象 │ ├── vo/ # 视图对象 │ ├── req/ # 请求参数对象 │ └── enums/ # 枚举类 ├── protocol/ # 路由协议解析(BGP/OSPF/EIGRP/RIP) │ ├── config/ # 协议公共缓存 │ └── */handle/ # 各协议拓扑处理 ├── runner/ # 启动运行器(加载协议字典到 Redis) ├── service/ # 业务逻辑层 + impl ├── strategy/ # 策略模式 — 文件操作 │ └── impl/ # FTP/HTTP/Local/SFTP 文件策略 ├── task/ # 定时任务(附件上传、监控) └── util/ # 工具(ES模板、IP工具、Excel工具、文件工具) ``` ## 功能模块 ### 1. 数据管理 `/datastream/data` 核心数据模块,负责网络数据包的查询、统计与分析: - **接入日志查询**:按时间/任务/线路等条件过滤接入日志 - **数据查询**:支持 PostgreSQL 和 Elasticsearch 双通道查询 - **协议概况**:统计分析各协议数据类型分布 - **流量统计**:计算时间段内的网络流量、数据包数量 - **IP 关系分析**:查询源/目的 IP 之间的通联关系 - **RTP/SIP 分析**:VoIP 通话的用户信息和拓扑关系 - **附件管理**:查询和分类数据附件 - **数据删除**:按文件/任务/线路维度清理数据 - **全文检索**:基于 ES 的多条件组合模糊搜索 ### 2. 文件服务 `/datastream/file` 多协议文件上传下载管理,支持**策略模式**切换存储后端: - **上传模式**:本地存储、FTP、SFTP、HTTP(外部文件服务) - **批量上传**:支持多文件同时上传并打标签 - **附件管理**:下载、预览、批量下载 - **数据源下载**:原始 pcap 文件下载、重新组包合并下载 - **下载日志**:通过 `@DownloadLog` 注解自动记录下载行为 ### 3. IP 管理 `/datastream/ip` IP 地址资产管理与识别: - IP 新增/删除/更新/分页查询 - IP 人工标注(设备类型、目标名称、经纬度) ### 4. 拓朴分析 `/datastream/topo` 路由协议拓扑还原与可视化: - 支持 **BGP、OSPF、EIGRP、RIP** 四种路由协议拓扑提取 - 定时自动提取路由拓扑(默认每6小时) - 拓扑节点标注(增删查) - 输出节点-边图结构供前端可视化渲染 ### 5. DPI 数据台账 `/datastream/dpi-ip-table` 深度包检测结果的多维度台账查询: - IP 台账(源/目的 IP 统计) - 设备台账 - 附件文件台账 - HTTP 流量台账 - DNS 解析台账 ### 6. 统计分析 `/datastream/report/statistic` 多维度数据统计报表: - **协议层统计**:各网络层级数据量分布 - **应用层 HTTP TOP10**:热门HTTP请求排名 - **端口使用统计**:Top-N 端口分布 - **IP 通联统计**:IP 之间的通信频次排名 - **时间流量/通联统计**:按时间维度的流量与连接数趋势 - **IP 拓扑图**:IP 设备关联关系图 - **IP 经纬度定位**:基于 GeoIP 库的地理位置可视化 - **服务节点统计**:服务端 IP 的使用情况 - **IP 出联规律分析**:IP 通信的时间规律与分布 ### 7. 协议字段转换 `/datastream/protocol` 协议元数据管理: - 协议字典管理(增删改查) - 协议字段列映射配置(批量更新) - 支持从 Excel 导入协议定义 ### 8. 元数据提取 `/datastream/reading-mail` 从网络流量中深度提取应用层信息: - 账号密码提取 - 数字证书提取 - SIP 通话信息提取 - DNS 解析信息提取 - 设备指纹提取 - IP 连接信息提取 ### 9. 配置与规则管理 - **实时数据源配置** `/datastream/input-config`:管理 TCP Socket、软件总线等在线数据接入源 - **用户自定义规则** `/datastream/custom-rule`:数据分类标签规则 - **文件特征规则** `/datastream/custom-file-rule`:基于文件特征的识别规则 - **标签字典** `/datastream/data-dict`:树形标签体系的父/子节点管理 - **关键字库** `/datastream/keyword`:系统关键字维护 ### 10. 运维功能 - **进程管理** `/datastream/prog`:查看 DPI/Kafka/ES/Datastream/KKFileView 等服务的进程状态、日志 - **消息通知** `/datastream/msg`:系统消息的已读/未读管理 - **Actuator 监控**:集成 Spring Actuator,暴露日志级别动态调整 ### 11. 开放接口 `/datastream/open-api` 对外提供的集成接口: - 根据文件 ID 查询原始文件 - 文件维度的协议统计 - 设备台账、IP 台账数据查询 ### 12. 试用期管理 `/datastream/trial` 软件授权与试用期校验,支持到期提醒和过期锁定。 ## 数据库核心表 | 表名 | 说明 | |------|------| | `datastream_data` | 主数据表,存储解析后的网络数据包 | | `datastream_data_annex` | 数据附件表 | | `datastream_data_input_log` | 数据接入日志表 | | `datastream_input_config` | 实时数据接入配置表 | | `datastream_ip` | IP 资产表 | | `datastream_data_dict` | 标签字典表 | | `datastream_keyword` | 关键字库表 | | `datastream_msg` | 消息通知表 | | `datastream_data_download_log` | 下载审计日志表 | | `datastream_protocol` | 协议信息表 | | `datastream_protocol_column_mapping` | 协议字段映射表 | 此外还有大量 DPI 专项表(DPI连接表、DPI凭证表、DPI设备表、DPI DNS表、DPI HTTP表等)、路由协议相关表(RouterInfo、RouterRelation等)、流量统计表、拓扑节点标注表等。 ## 快速开始 ### 环境要求 - JDK 17+ - Maven 3.6+ - PostgreSQL 数据库 - Elasticsearch 7.x - Redis - MinIO(可选,用于对象存储) ### 本地启动 ```bash # 1. 克隆项目 git clone cd datastream # 2. 初始化数据库 # 使用 src/main/resources/init_database.sql 创建表结构和初始数据 # 3. 修改配置 # 编辑 src/main/resources/application-dev.yml # 配置数据库、Redis、Elasticsearch、MinIO 连接信息 # 4. 编译运行 mvn clean compile -DskipTests mvn spring-boot:run -Dspring-boot.run.profiles=dev ``` 启动后访问: - **Swagger 文档**:`http://localhost:8086/datastream/doc.html` - **Actuator**:`http://localhost:8086/datastream/actuator` ### 配置说明 | 配置项 | 说明 | |--------|------| | `file.file-mode` | 文件存储模式:`local`/`ftp`/`sftp`/`http` | | `upload-annex.enabled` | 是否启用附件自动上传定时任务 | | `topo.extract-cron` | 路由拓扑提取的 Cron 表达式 | | `apollo.enabled` | 是否启用 Apollo 配置中心(开发环境设为 false) | | `untrial` | 是否关闭试用期检查 | | `dataDelete` | 是否启用自动数据清理 | ### 多环境配置 项目支持多环境配置文件: - `application-dev.yml` — 开发环境 - `application-test.yml` — 测试环境 - `application-test15.yml` / `application-test17.yml` — 特定测试节点 - `application-prod.yml` — 生产环境 通过 `spring.profiles.active` 切换。 ## 设计模式与架构亮点 ### 策略模式 — 文件存储 通过 `FileStrategy` 接口抽象文件的上传下载,支持运行时切换存储后端: - `LocalFileStrategy` — 本地文件系统 - `FTPFileStrategy` — FTP 服务器 - `SFTPFileStrategy` — SFTP 服务器 - `HttpFileStrategy` — HTTP 外部文件服务 ### BaseManager 抽象 `BaseManager` 接口封装了 MyBatis-Plus 的通用 CRUD 操作,各业务 Manager 继承该接口后可获得统一的数据访问能力,避免重复代码。 ### AOP 切面 - `DebugLogAspect`:自动打印 Controller 层的请求参数和返回值(开发调试用) - `DownloadLogAspect`:通过 `@DownloadLog` 注解自动记录文件下载审计日志 ### 协议拓扑引擎 实现了 BGP、OSPF、EIGRP、RIP 四种主流路由协议的解析逻辑,可以从网络数据包中提取路由器节点和链路关系,生成拓扑图。支持定时自动提取。 ### 多数据源查询 数据查询支持 PostgreSQL(结构化小数据)和 Elasticsearch(非结构化大数据)双通道,根据查询条件自动路由。 ## 相关文档 - `src/main/resources/protocol.xlsx` — 协议字典定义 - `src/main/resources/protocol-field.xlsx` — 协议字段定义 - `src/main/resources/protocol-dict.txt` — 协议文本字典 - `src/main/resources/init_database.sql` — 数据库初始化脚本 - `src/main/resources/geo/` — IP 地理位置数据库文件 --- **Fritt** © 2023-2024