PrernaSrivastava1/NetScope-DPI
GitHub: PrernaSrivastava1/NetScope-DPI
一个基于多线程并发架构的 Web 端高吞吐量深度包检测与可视化平台,上传 PCAP 文件即可在交互式仪表盘中分析流量特征。
Stars: 0 | Forks: 0
# NetScope-DPI:高吞吐量深度包检测系统
NetScope-DPI 是一个开源的高吞吐量网络分析引擎和可视化平台。它解析原始的二进制 Packet Capture (`.pcap`) 文件,重建有状态的 TCP/UDP 连接流,执行实时的深度包检测 (DPI) 以识别应用特征(如 TLS SNI 和 DNS 查询),根据动态防火墙规则评估流量,并在交互式、响应式的 Web 仪表盘中渲染输出结果。
**生产环境链接**: [https://frontend-tan-eta-66.vercel.app](https://frontend-tan-eta-66.vercel.app)
## 本项目
### 关于
当计算机通过网络进行通信时,它们会将信息分解成称为**数据包**的微小数据块。为了诊断连接问题、分析安全威胁或优化带宽,工程师们会使用像 `tcpdump` 这样的命令行嗅探器或像 `Wireshark` 这样的图形化分析工具,将这些数据包记录到称为**数据包捕获**的二进制文件中。
然而,阅读原始的 PCAP 二进制文件极其困难。虽然像 Wireshark 这样的桌面应用程序非常出色,但它们存在以下问题:
1. **庞大且消耗资源**:在本地解析数百万个数据包可能会导致普通笔记本电脑卡死。
2. **孤立性**:要分享复杂的数据包分析会话,需要来回发送庞大的二进制文件。
3. **复杂性**:非网络开发人员或招聘人员很难浏览 Wireshark 密集的界面。
### 灵感
NetScope 的灵感来源于对基于 Web 的、零安装的替代方案的需求,旨在让每个人都能进行深度数据包分析。通过将高度并行、多线程的 Java 解析后端与基于 React 的干净整洁的 Next.js 前端相结合,NetScope 能够获取原始的数据包捕获,并发处理它们,并将其显示为任何人都可以立即理解的视觉图形、图表和交互式连接节点。
## 问题陈述与影响
### 问题
传统的网络数据包分析工具按顺序处理 PCAP 文件。当文件包含数百兆的原始字节时,单线程逐个读取数据包会成为性能瓶颈。此外,现代 Web 流量在 SSL/TLS (安全套接层 / 传输层安全协议) 下进行了加密。标准的包解析器只能看到加密的、看起来像随机数据的内容,这使得无法确定是哪些应用程序(如 YouTube、Zoom 或 Discord)正在消耗网络资源。
### 为什么解决这个问题很重要
1. **网络安全与 SOC (安全运营中心)**:安全分析师需要检查元数据,以识别恶意活动或数据泄露,而无需解密流量。
2. **网络审计**:管理员需要实时识别占用大量带宽的应用。
3. **教育与招聘**:学生需要一种清晰的方式来观察理论网络协议在实际中是如何运作的,而招聘人员需要一种有效的方式来检验候选人的系统级思维能力。
## 实际应用场景
* **安全分析师 (SOC / 取证)**:对中小型捕获转储进行快速元数据审计,以检查数据包头并跟踪网络异常。
* **系统与网络工程师**:用于演示流组装、协议头和负载均衡器线程分配的教学工具。
* **学者与学习者**:准备系统设计和技术面试的学生。
* **招聘人员**:一个实时的作品集展示,用于验证候选人对 CPU 密集型并发、二进制解析和整洁的前端设计的理解。
## 目标
* **主要目标**:并发地从原始二进制数据包流中重建连接状态(流)。
* **次要目标**:检查 TLS 客户端握手(SNI 嗅探)和 DNS 结构,从而在不进行 payload 解密的情况下对加密流量进行分类。
* **长期愿景**:发展成为 Kubernetes 环境中用于实时网络审计的轻量级、容器化 sidecar 仪表盘。
## 系统架构
NetScope 采用专为 CPU 密集型二进制处理而构建的**流水线设计**。
```
graph TD
A[Upload PCAP file] --> B[PcapReader Thread]
B -->|Extracts Raw Packets| C[LBManager Load Balancer]
C -->|Symmetric Consistent Hashing| D[Worker ArrayBlockingQueues]
D -->|Worker Threads: FastPathProcessors| E[DPI Engine]
E -->|Stateful Flow Assembly| F[Global Connection Table]
E -->|Protocol Parsers: DNS / TLS| G[Application Signature Matching]
G -->|Rule Engine Evaluation| H[Output Aggregator]
H -->|Complete Analysis JSON| I[Next.js Dashboard UI]
```
### 架构拆解
1. **解析器接口 (`PcapReader`)**:解析 PCAP 全局报头,验证魔数(确定字节序),并按顺序读取数据包块。
2. **负载均衡器 (`LBManager`)**:为了在不混淆会话的情况下并发处理数据包,我们对每个数据包的 **5-Tuple**(源 IP、目标 IP、源端口、目标端口、协议)进行哈希处理。
* *对称哈希*:负载均衡器在哈希之前对 IP 和端口进行排序。这确保了来自 `A -> B` 的数据包和来自 `B -> A` 的响应数据包生成完全相同的哈希值,从而将它们路由到同一个处理器队列中。
3. **并发有界队列**:数据包被分发到绑定于专用 `FastPathProcessor` 线程的线程安全 `ArrayBlockingQueue` 队列中。
4. **流跟踪器与解析器**:Worker 处理其队列中的任务。如果数据包是 TCP,Worker 会更新连接状态机(处理 SYN、ACK、FIN 标志)。如果它包含 UDP/TCP payload,Worker 会触发协议嗅探器。
5. **输出聚合**:当队列排空时,统计信息、时间线数据、连接图节点列表和规则状态将被序列化为 JSON 并发送到客户端。
## 文件夹结构
```
NetScope-DPI/
├── docs/ # Guides for deployments, env variables, and troubleshooting
├── assets/ # Media files and live screenshot assets
├── vercel.json # Vercel monorepo configuration
├── render.yaml # Render blueprint specification file
├── java-packet-analyzer/ # Spring Boot backend directory
│ ├── Dockerfile # Multi-stage JVM compilation file
│ ├── pom.xml # Maven dependency descriptor
│ └── src/main/java/com/packetanalyzer/
│ ├── DPIWebApplication.java # Spring Boot Main Entrypoint
│ ├── config/ # Configuration parameters (thread pool size, rule files)
│ ├── controller/ # REST API endpoints (Analyze, Rules management)
│ ├── parser/ # Binary PCAP parser and L2-L4 packet decoder
│ ├── service/ # Thread management, Load Balancing, and FastPath executors
│ ├── flow/ # Stateful trackers and global flow tables
│ ├── rules/ # Firewall rule matcher and action controller
│ ├── protocol/ # TLS SNI, HTTP Host, and DNS payload extractors
│ └── utils/ # Byte converters and consistent hashing functions
└── frontend/ # Next.js frontend directory
├── package.json # Frontend dependencies
├── public/ # Favicon and static files
└── src/app/
├── page.tsx # Full React dashboard UI and Canvas network graph
├── layout.tsx # Page shell metadata, headers, and favicon declarations
└── globals.css # Design system classes and animations
```
## 技术栈与选型理由
| 技术 | 理由 | 替代方案 | 优点 | 缺点 | 在 NetScope 中的作用 |
|---|---|---|---|---|---|
| **Java 21** | 优秀的多线程原语(`ArrayBlockingQueue`、Executor 服务)和 JIT 性能。 | C++(构建周期较长),Python(GIL 限制了解析)。 | 跨平台、成熟的线程模型、强大的垃圾回收。 | 内存占用较高。 | 驱动多线程解析器核心和有状态引擎。 |
| **Spring Boot 3** | 标准 Web 框架,简化了 REST endpoint 的暴露。 | Go/Gin、Node/Express。 | 内置 HTTP 服务器,配置简单,启动迅速。 | 初始启动时间较长。 | 作为 Web 服务器封装,暴露 API endpoint。 |
| **Next.js 16** | 出色的 TypeScript 集成、路由和 Turbopack 构建。 | Create React App。 | 构建更快,结构现代。 | 学习曲线较陡峭。 | UI 仪表盘外壳和客户端状态容器。 |
| **Tailwind CSS v4** | 即时的样式工具。 | 原生 CSS、Sass。 | 快速创建 UI,编译体积小。 | HTML 中 class 过于臃肿。 | 实现深色主题、毛玻璃面板和整体样式。 |
| **Docker** | 保证云端和本地环境具有完全一致的执行环境。 | 手动安装 Java。 | 干净的部署,沙盒化的 container。 | 构建产物体积较大。 | 打包 Maven 构建和 JRE,以便在 Render 上运行后端。 |
## 依赖项拆解
### 后端依赖 (`pom.xml`)
* `spring-boot-starter-web`:引入内嵌的 Tomcat 服务器和 REST controller 映射。*(如果移除,我们将无法暴露 HTTP API)。*
* `spring-boot-starter-test` / `junit-jupiter-api`:驱动 JUnit 5 测试用例。*(如果移除,我们将无法对一致性哈希或流跟踪运行单元测试)。*
### 前端依赖 (`package.json`)
* `lucide-react`:SVG 图标库。*(如果移除,仪表盘布局图标将失效)。*
* `recharts`:图表渲染引擎。*(如果移除,数据包时间线和协议图表将无法显示)。*
* `framer-motion`:处理 UI 入场动画。*(如果移除,过渡效果将变为静态)。*
## 数据生命周期与流
```
Raw PCAP File -> Binary Stream -> Header Validation (Endian check) -> Packet Extraction
-> 5-Tuple Symmetric Hash -> Worker Queue -> Layer 2-4 Parsing -> DNS/TLS SNI Sniffing
-> Firewall Rule Evaluation -> Stateful Assembly -> JSON Serialization -> Next.js Frontend
-> Canvas Graph / Recharts Rendering -> End User Dashboard
```
## ⚙️ 核心算法与协议
### 1. 对称 5-Tuple 一致性哈希
为了将属于同一连接的数据包路由到同一个 Worker 线程:
1. 读取数据包的 **5-Tuple**:`(SrcIP, DstIP, SrcPort, DstPort, Protocol)`。
2. 对源和目标字段进行排序:
* `MinIP = min(SrcIP, DstIP)`,`MaxIP = max(SrcIP, DstIP)`
* `MinPort = min(SrcPort, DstPort)`,`MaxPort = max(SrcPort, DstPort)`
3. 将这些排序后的值组合成一个 64 位哈希。
4. 应用取模映射来选择线程队列:`QueueIndex = Hash % NumWorkerThreads`。
### 2. TLS SNI 嗅探(HTTPS 应用识别)
为了在加密流中识别应用程序:
1. 验证传输协议为 TCP 且目标端口为 `443` (HTTPS)。
2. 跳过 TCP 报头并检查应用 payload。
3. 读取 TLS 握手记录头。验证 Content-Type 为 `22` (Handshake),且 Version 为 `0x0301`、`0x0302` 或 `0x0303`。
4. 定位 Handshake Type 为 `1` (Client Hello)。
5. 跳过 Client Version、Random Bytes、Session ID、Cipher Suites 和 Compression Methods。
6. 解析 TLS Extensions 部分。找到 Extension Type 为 `0x0000` (Server Name Indication)。
7. 提取明文服务器主机名字节流(例如 `images.google.com`)。
## 安全、网络与网络安全基础
* **数据包捕获**:一种标准文件格式,用于记录通过网络接口传输的原始数据包。
* **5-Tuple**:标识性的网络报头集合:`Source IP Address, Destination IP Address, Source Port, Destination Port, Protocol`。它唯一标识一次 TCP 或 UDP 会话。
* **深度包检测 (DPI)**:检查数据包的应用层数据 payload(第 5-7 层),而不仅仅是查看 L3/L4 报头(IP 和端口)。
* **服务器名称指示 (SNI)**:TLS 协议的一个扩展,客户端在握手开始时指示它试图连接的主机名。这部分内容是以明文形式可见的。
* **乱序数据包**:网络路由器可以通过不同的物理路径路由数据包,导致它们乱序到达。NetScope 的连接跟踪通过追踪 TCP 序列号和重新组装缓冲区来处理此问题。
## 本地运行与部署
有关设置本地运行和部署到 Vercel 和 Render 等平台的详细步骤,已完整记录在项目的文档文件夹中:
* [deployment.md](file:///c:/Users/HP/PA-NET-SCOPE/Packet_analyzer/docs/deployment.md) - 包含完整的分步本地运行说明和生产部署配置。
* [environment.md](file:///c:/Users/HP/PA-NET-SCOPE/Packet_analyzer/docs/environment.md) - 列出所有后端配置变量。
* [troubleshooting.md](file:///c:/Users/HP/PA-NET-SCOPE/Packet_analyzer/docs/troubleshooting.md) - 关于解决部署失败或连接超时的指南。
prerna7105@gmail.com
标签:PCAP解析, 域名枚举, 流量监控, 深度包检测, 网络安全分析, 网络流量分析, 请求拦截