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}
}
```
标签:逆向工具