is-leeroy-jenkins/Sloppy

GitHub: is-leeroy-jenkins/Sloppy

基于 Streamlit 的交互式网络数据包分析应用,提供手工协议解析、实时或模拟捕获及实时可视化分析。

Stars: 0 | Forks: 0

###### Sloppy ![](https://github.com/is-leeroy-jenkins/Sloppy/blob/main/resources/images/sloppy_project.png) ## 📌 概述 **Sloppy** 是一个基于 Python 构建、使用 **Streamlit** 开发的交互式网络数据包分析应用程序。 它将**底层协议解析**、**实时或模拟数据包捕获**以及**实时分析**结合到一个单一的、对分析师友好的界面中。 ## ✨ 核心功能 * 🧪 **演示 / 回放模式** — 用于测试和演示的确定性合成流量 * 🛰️ **实时数据包捕获** — 通过 Scapy 进行实时嗅探(具备权限感知) * 🔍 **手动协议解析** — Ethernet、IPv4、TCP、UDP、ICMP(没有黑盒) * 🧵 **线程安全摄入** — 基于队列缓冲的后台捕获 * 🪟 **滚动会话窗口** — 有限的内存占用,持续更新 * 🎛️ **交互式过滤** — 协议、端口范围、数据包窗口 * 📊 **实时分析** — 指标、分布和时间序列 * 📋 **实时数据包流** — 可排序、可滚动的元数据表 ## 🧱 架构概览 ``` ┌────────────────────┐ │ 🧪 Demo Generator │ │ 🛰️ Scapy Capture │ └─────────┬──────────┘ │ raw bytes ┌─────────▼──────────┐ │ 🔍 Protocol Parsers │ │ Ethernet / IPv4 │ │ TCP / UDP / ICMP │ └─────────┬──────────┘ │ normalized records ┌─────────▼──────────┐ │ 🧵 Session State │ │ Queue + Windowing │ └─────────┬──────────┘ │ DataFrame ┌─────────▼──────────┐ │ 📊 Analytics & UI │ │ Metrics • Charts │ └────────────────────┘ ``` ## 📁 项目结构 ``` sloppy/ ├── 🧠 __init__.py # Core protocol parsing library ├── 🖥️ app.py # Streamlit application orchestrator ├── ⚙️ config.py # UI assets and configuration ├── 📦 requirements.txt # Python dependencies └── 📘 README.md # Documentation ``` ## 🧠 核心解析引擎 (`__init__.py`) Sloppy 包含一个**手动协议解码层**,直接针对原始字节实现。 ### 支持的协议 * 🧬 **Ethernet** — MAC 地址,EtherType * 🌐 **IPv4** — TTL、协议、源/目的 IP * 🔁 **TCP** — 端口、标志、序列数据 * 📡 **UDP** — 端口和 payload * 📣 **ICMP** — 类型和代码 * 🌍 **HTTP** — 尽力而为的 UTF-8 payload 解码 ### 为什么这很重要 * 解析逻辑不依赖 Scapy * 确定且可测试的行为 * 可在 Streamlit 之外复用 * 非常适合教育、研究和受控分析 ## 🖥️ Streamlit 应用程序 (`app.py`) Streamlit 层提供**编排、分析和可视化**,而不是解析。 ### 捕获模式 #### 🧪 演示 / 回放 * 生成逼真的合成数据包 * 不需要管理员权限 * 完整运行分析 pipeline #### 🛰️ 实时 (Scapy) * 捕获真实的网络流量 * 在后台 daemon 线程中运行 * 如果缺少 Scapy 或权限,则会优雅地禁用 ## 🎛️ 用户界面 ### 侧边栏控制 * ▶️ 开始 / ■ 停止捕获 * 🔄 捕获模式选择 * 🎚️ 协议过滤器 * 🔢 目标端口范围 * 🪟 滚动数据包窗口大小 ### 主面板 * 📈 核心指标 * 📊 协议分布 * ⏱️ 随时间变化的流量(基于窗口) * 📋 实时数据包流表 ## 📊 分析与可视化 * **📈 核心指标** * 总数据包数 * 唯一源 IP * 唯一目标 IP * 平均数据包大小 * 协议多样性 * **📊 协议分布** * 观察到的流量的分类细分 * **⏱️ 随时间变化的流量** * 每秒数据包数 * 安全的窗口化设计以防止内存溢出 * **📋 实时数据包流** * 按时间戳排序的元数据视图 * 可滚动且感知过滤器 ## 🧵 并发与安全 * 后台捕获运行在 **daemon 线程** 中 * UI 绝不会因网络 I/O 而阻塞 * 数据包摄入使用有界队列 * 滚动窗口强制执行内存限制 * 始终遵循 Streamlit 的 rerun 模型 ## 📦 安装说明 ``` python -m venv .venv source .venv/bin/activate # Windows: .venv\Scripts\activate pip install -r requirements.txt pip install streamlit scapy ``` ## ▶️ 运行 Sloppy ``` streamlit run app.py ``` ## 🧭 自然扩展点 * 📂 PCAP 导入/导出 * 🔗 流重组 (5-tuple) * 🚨 异常与威胁评分 * 💾 持久化会话存储 * 📡 特定于协议的仪表板 * 📤 报告导出 (CSV / Markdown) ## 📜 许可证 [MIT 许可证](https://github.com/is-leeroy-jenkins/Sloppy/blob/main/LICENSE.txt) © 2022–2025 Terry D. Eppler
标签:Kubernetes, Mutation, Scapy, Streamlit, 可视化, 数据包解析, 网络流量分析, 访问控制, 逆向工具