ThisPlatypus/From-PCAP-to-IMAGE

GitHub: ThisPlatypus/From-PCAP-to-IMAGE

将 PCAP 网络抓包文件按会话或流拆分并转换为固定大小灰度图像的 Python 工具包,专为生成机器学习训练数据集而设计。

Stars: 1 | Forks: 0

# PCAP 到图像数据集生成器 一个用于将 PCAP 文件转换为固定大小灰度图像的 Python 工具包,适用于机器学习数据集,并支持嵌套目录结构。 ## 仓库结构 ``` . ├── 0_pcap/ # Original PCAP files (input) │ ├── malware/ # Example: nested structure │ │ ├── trojan/ │ │ └── ransomware/ │ └── benign/ ├── 1_splitted_pcap/ # Split PCAP files (preserves structure) │ ├── malware/ │ │ ├── trojan/ │ │ └── ransomware/ │ └── benign/ ├── 2_Images/ # Generated images (preserves structure) │ ├── malware/ │ │ ├── trojan/ │ │ └── ransomware/ │ └── benign/ ├── split_pcap.py # Script to split PCAP files ├── pcap_to_image.py # Script to convert PCAP to images ├── requirements.txt # Python dependencies └── README.md # This file ``` ## 安装说明 1. **克隆或创建仓库:** ``` mkdir pcap-dataset-creator cd pcap-dataset-creator ``` 2. **创建目录结构:** ``` mkdir -p 0_pcap 1_splitted_pcap 2_Images ``` 3. **安装依赖:** ``` pip install -r requirements.txt ``` ## 环境要求 `requirements.txt` 文件包含: ``` scapy>=2.5.0 numpy>=1.21.0 Pillow>=9.0.0 ``` ## 用法 ### 第 1 步:拆分 PCAP 文件 按 session 或 flow 拆分 PCAP 文件,并自动修剪/填充至 800 位(100 字节): **处理单个文件:** ``` python split_pcap.py 0_pcap/capture.pcap --mode session --max-bits 800 ``` **处理整个目录树(保留嵌套结构):** ``` python split_pcap.py 0_pcap/ --mode session --max-bits 800 ``` **自定义位大小:** ``` python split_pcap.py 0_pcap/ --mode flow --max-bits 1600 ``` ### 第 2 步:转换为图像 将拆分后的 PCAP 文件转换为固定大小的灰度图像: **完整数据包模式与 28x28 图像:** ``` python pcap_to_image.py --mode full --size 28x28 ``` **仅 Header 模式与自定义大小:** ``` python pcap_to_image.py --mode header --size 32x32 ``` **自定义输入/输出目录:** ``` python pcap_to_image.py --input 1_splitted_pcap --output 2_Images --mode full --size 64x64 ``` ### 参数说明 #### split_pcap.py - `input`:输入 PCAP 文件或目录路径(必填) - `--mode`:拆分模式 - `session`(双向)或 `flow`(单向)[默认值:session] - `--output`:输出基础目录 [默认值:1_splitted_pcap] - `--max-bits`:每个拆分文件的最大位数,将修剪或填充至该确切大小 [默认值:800] #### pcap_to_image.py - `--input`:包含 PCAP 文件的输入目录 [默认值:1_splitted_pcap] - `--output`:图像输出目录 [默认值:2_Images] - `--mode`:转换模式 - `header`(仅 Header)或 `full`(整个数据包)[默认值:full] - `--size`:图像尺寸,格式为 宽x高(例如 28x28, 32x32, 64x64)[默认值:28x28] ## 完整工作流示例 ### 简单示例(单个文件) ``` # 将 PCAP 放入 0_pcap/ cp capture.pcap 0_pcap/ # 按会话分割(每个 800 bits) python split_pcap.py 0_pcap/capture.pcap --mode session --max-bits 800 # 转换为 28x28 图像(完整 packet) python pcap_to_image.py --mode full --size 28x28 ``` ### 进阶示例(嵌套目录结构) ``` # 按类别组织你的 PCAP 0_pcap/ ├── malware/ │ ├── trojan/ │ │ ├── sample1.pcap │ │ └── sample2.pcap │ └── ransomware/ │ └── sample3.pcap └── benign/ └── normal_traffic.pcap # 分割所有文件,保留结构 python split_pcap.py 0_pcap/ --mode session --max-bits 800 # 结果保存在 1_splitted_pcap/: 1_splitted_pcap/ ├── malware/ │ ├── trojan/ │ │ ├── sample1_20241216_143052_session_0001.pcap │ │ ├── sample1_20241216_143052_session_0002.pcap │ │ └── ... │ └── ransomware/ │ └── ... └── benign/ └── ... # 转换为图像,保留结构 python pcap_to_image.py --mode full --size 32x32 # 结果保存在 2_Images/: 2_Images/ ├── malware/ │ ├── trojan/ │ │ ├── sample1_20241216_143052_session_0001.png │ │ ├── sample1_20241216_143052_session_0002.png │ │ └── ... │ └── ransomware/ │ └── ... └── benign/ └── ... ``` ## 核心功能 ### 🎯 固定大小处理 - **位级控制**:指定位的确切大小(默认:800 位 = 100 字节) - **自动修剪**:大于 max-bits 的文件将被截断 - **自动填充**:小于 max-bits 的文件将进行零填充 - **完美的统一性**:所有拆分后的 PCAP 大小完全一致 ### 📊 图像生成 - **固定尺寸**:指定确切的图像大小(例如 28x28, 32x32, 64x64) - **自动修剪**:超出图像大小的数据将被截断 - **自动填充**:小于图像大小的数据将进行零填充 - **数据集就绪**:所有图像的尺寸完全相同 ### 📁 保留目录结构 - **嵌套文件夹**:自动保留嵌套的目录结构 - **有序的数据集**:维持您的分类/标签层级结构 - **批量处理**:递归处理整个目录树 ### 🔍 灵活提取 - **Header 模式**:仅提取数据包 Header(Ethernet + IP + TCP/UDP) - **完整模式**:提取包含 payload 的完整数据包数据 - **隐私控制**:使用 Header 模式可排除敏感的 payload 数据 ## 计算示例 ### 位大小转换为图像大小 ``` 800 bits = 100 bytes → 10x10 image (100 pixels) → 28x28 image (784 pixels) - requires padding → 8x12 image (96 pixels) - requires trimming 1600 bits = 200 bytes → 14x14 image (196 pixels) - requires padding → 10x20 image (200 pixels) - perfect fit! ``` ### 常用配置 ``` # 小图像(MNIST 风格) --max-bits 784 --size 28x28 # 784 bits = 98 bytes, perfect fit # 中等图像 --max-bits 1024 --size 32x32 # 1024 pixels = 128 bytes # 较大图像 --max-bits 4096 --size 64x64 # 4096 pixels = 512 bytes ``` ## Session 与 Flow 的对比 - **Session 模式**:双向(通信的两个方向)对数据包进行分组 - 适用于:协议分析、连接行为 - 文件更少,每个文件包含的上下文更多 - 示例:192.168.1.10:443 与 10.0.0.5:8080 之间的所有数据包 - **Flow 模式**:将每个方向分开 - 适用于:非对称分析、单向流量模式 - 文件更多,控制更精细 - 示例:192.168.1.10:443 → 10.0.0.5:8080(与反向方向分开) ## Header 与完整数据包的对比 - **Header 模式**:仅包含数据包 Header - Ethernet(14 字节)+ IP(20-60 字节)+ TCP/UDP(20-60 / 8 字节) - 通常每个数据包 42-134 字节 - 保护隐私(无 payload 数据) - 适用于基于协议的分类 - **完整模式**:完整的数据包数据 - Header + payload - 大小因数据包而异 - 更适用于深度数据包检测 - 包含应用层(Application-layer)数据 ## 输出格式 ### 拆分 PCAP 文件 - **命名方式**:`{original}_{timestamp}_{mode}_{index}.pcap` - **示例**:`capture_20241216_143052_session_0001.pcap` - **大小**:确切的 `max-bits` 位(经过修剪或填充) ### 图像 - **格式**:PNG(灰度,8位) - **命名方式**:与 PCAP 相同,但扩展名为 `.png` - **尺寸**:完全符合指定(例如 28x28) - **像素值**:0-255(每个字节成为一个像素值) ## 应用场景 - **网络入侵检测**:基于数据包模式训练 CNN - **流量分类**:从数据包 Header 识别应用程序 - **恶意软件检测**:分析 C&C 通信模式 - **协议指纹识别**:网络协议的可视化特征 - **异常检测**:识别异常网络行为 ## 提示 1. **选择合适的 max-bits**: - 800 位非常适合仅 Header 分析 - 1600-3200 位更适合完整数据包分析 2. **使 max-bits 与图像大小相匹配**: - 28x28 = 784 字节 = 6,272 位 - 推荐:`--max-bits 6272 --size 28x28` 3. **目录组织**: - 按流量类型组织(恶意/良性) - 按协议组织(HTTP/SSH/DNS) - 脚本会保留您创建的任何结构 4. **Header 模式的优势**: - 处理速度更快 - 符合隐私要求(无 payload) - 文件更小 ## 故障排除 ### 常见问题 **"No module named 'scapy'"** ``` pip install -r requirements.txt ``` **读取 PCAP 时提示 "Permission denied"** ``` # 在 Linux/Mac 上,某些 PCAP 可能需要 sudo sudo python split_pcap.py 0_pcap/capture.pcap ``` **图像看起来是随机的/有噪点** - 这是正常现象!网络流量转换成的图像本来就是看似随机的 - ML 模型能够学习人类无法察觉的模式 - 尝试不同的模式(Header 与 完整模式)以查看差异 **输出目录为空** - 检查输入的 PCAP 是否包含 IP 流量 - 非 IP 数据包会被过滤掉 - 检查文件权限 ## 许可证 MIT 许可证 - 可自由用于您的项目并进行修改。 ## 引用 如果您在研究中使用了此工具,请引用: ``` @software{pcap_to_image_dataset, title = {PCAP to Image Dataset Creator}, year = {2024}, url = {https://github.com/yourusername/pcap-dataset-creator} } ``` ## 相关链接 此代码是以下论文的一部分: ``` @inproceedings{camerota2024addressing, title={Addressing data security in iot: Minimum sample size and denoising diffusion models for improved malware detection}, author={Camerota, Chiara and Pappone, Lorenzo and Pecorella, Tommaso and Esposito, Flavio}, booktitle={2024 20th International Conference on Network and Service Management (CNSM)}, pages={1--7}, year={2024}, organization={IEEE} } ```
标签:逆向工具