NeT2i (Network to Image) converts network traffic data into RGB images suitable for CNN-based anomaly detection.
Project description
net2i - Network Data to Image Converter
A Python library for converting network traffic data (CSV format) into RGB images for machine learning applications, particularly CNNs. net2i uses lossless encoding to preserve all data information while creating CNN-ready image datasets from network traffic logs.
๐ Companion Tool: Use i2net to decode images back to CSV format
๐ Features
- ๐ Automatic IP Version Detection: Separates IPv4 and IPv6 data automatically
- ๐ Lossless Data Encoding: Converts network data to RGB pixels without information loss
- ๐ Multiple Data Type Support: Handles IP addresses, MAC addresses, floats, integers, and strings
- ๐ง CNN-Ready Output: Generates images optimized for convolutional neural networks
- ๐ Type Information Preservation: Saves encoding metadata for data reconstruction via i2net
- โ๏ธ Configurable Parameters: Customizable image size and output directories
- ๐ Mixed IP Version Support: Processes IPv4 and IPv6 data in the same dataset
๐ฆ Installation
pip install pandas numpy pillow
Requirements:
- Python 3.9+
- pandas
- numpy
- Pillow (PIL)
- ipaddress (built-in)
๐ Quick Start
Basic Usage
import net2i
# Convert network traffic CSV to images
results = net2i.encode('network_traffic.csv')
print(f"Generated {results['total_images']} images in '{results['output_dir']}'")
With Custom Configuration
import net2i
# Configure for specific CNN requirements
results = net2i.encode(
'firewall_logs.csv',
output_dir='cnn_training_data',
image_size=224 # ResNet/VGG input size
)
Global Configuration
import net2i
# Set global defaults
net2i.set_config(
output_dir='training_images',
image_size=150,
clean_existing=True
)
# Use configured settings
results = net2i.encode('network_data.csv')
๐ Supported Network Data Types
| Data Type | Detection Method | Encoding Strategy | Output Pixels |
|---|---|---|---|
| IPv4 Address | Automatic pattern matching | Split into 4 octets โ IEEE 754 encoding | 8 RGB pixels |
| IPv6 Address | Automatic pattern matching | 128-bit โ 16 bytes + 2 padding | 6 RGB pixels |
| MAC Address | Regex: XX:XX:XX:XX:XX:XX |
Split into 2 hex chunks โ float encoding | 4 RGB pixels |
| Float/Integer | Numeric detection | Direct IEEE 754 encoding | 2 RGB pixels |
| String | Default fallback | Consistent hash โ float encoding | 2 RGB pixels |
Encoding Details
- Two-Pixel-Per-Float Strategy: Each float value uses exactly 2 RGB pixels (6 bytes) for lossless IEEE 754 representation
- IP Address Decomposition: IPv4 addresses split into octets, IPv6 addresses use full 128-bit representation
- Hash-Based String Encoding: Strings converted using consistent hashing for reproducible results
๐ง API Reference
Core Functions
encode(csv_path, **kwargs)
Main function to convert CSV network data to images.
Parameters:
csv_path(str): Path to input CSV file containing network traffic dataoutput_dir(str, optional): Directory for output images (default: 'data')image_size(int, optional): Size of square output images (default: 150)
Returns:
{
'input_file': 'network_traffic.csv',
'output_dir': 'data',
'image_size': 150,
'has_ipv4': True,
'has_ipv6': False,
'total_images': 1000,
'ipv4_results': {...},
'ipv6_results': None
}
load_csv(csv_path)
Load and validate network traffic CSV file.
set_config(**kwargs)
Configure global settings for all operations.
Configuration Options:
output_dir: Output directory for generated imagesimage_size: Image dimensions (width ร height) - tune for your CNN architecturetypes_file: JSON file for IPv4 type information ('data_types.json')types_file_ipv6: JSON file for IPv6 type information ('data_types_ipv6.json')clean_existing: Clean existing files before processing (default: True)
Utility Functions
show_config(): Display current configurationreset_config(): Reset to default settingshelp(): Show detailed usage examples
๐ Output Structure
Generated Files
output_dir/
โโโ ipv4_0.png
โโโ ipv4_1.png
โโโ ipv4_2.png
โโโ ...
โโโ ipv6_0.png
โโโ ipv6_1.png
โโโ ...
data_types.json
data_types_ipv6.json
ipv4_rows.csv
ipv6_rows.csv
Type Information Files
{
"ip_version": "IPv4",
"original_types": ["IPv4 Address", "Float", "String"],
"final_types": ["IPv4 Address", "IPv4 Address", "IPv4 Address", "IPv4 Address", "Float", "String"],
"encoding_info": {
"description": "Data type mapping for decoding - IPv4 version",
"float_encoding": "Each float becomes 2 RGB pixels (6 bytes total)",
"ipv4_encoding": "IPv4 address split into 4 octets, each becomes 2 RGB pixels"
},
"original_columns": 3,
"final_columns": 6
}
๐ง Machine Learning Integration
TensorFlow/Keras Pipeline
import net2i
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
net2i.set_config(image_size=224, output_dir='training_data')
results = net2i.encode('network_traffic.csv')
datagen = ImageDataGenerator(
rescale=1./255,
validation_split=0.2,
rotation_range=10,
width_shift_range=0.1,
height_shift_range=0.1
)
train_generator = datagen.flow_from_directory(
'training_data',
target_size=(224, 224),
batch_size=32,
class_mode='categorical',
subset='training'
)
validation_generator = datagen.flow_from_directory(
'training_data',
target_size=(224, 224),
batch_size=32,
class_mode='categorical',
subset='validation'
)
PyTorch Integration
import net2i
import torch
from torchvision import transforms, datasets
from torch.utils.data import DataLoader
net2i.encode('network_logs.csv', image_size=224)
transform = transforms.Compose([
transforms.Resize((224, 224)),
transforms.ToTensor(),
transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225])
])
dataset = datasets.ImageFolder('data', transform=transform)
dataloader = DataLoader(dataset, batch_size=32, shuffle=True, num_workers=4)
๐ Input Data Format
CSV Structure
- No headers required
- Mixed data types supported
- Standard network formats: IPs, MACs, ports, timestamps
Example CSV
12,2001:0db8:85a3:0000:0000:8a2e:0370:7334,52:54:00:34:65:b2,...
11,192.168.248.159,52:54:00:34:65:b2,...
12,192.168.248.159,52:54:00:34:65:b2,...
Sources
- Firewall logs
- IDS/IPS alerts
- Flow records
- Packet capture summaries
- 5G-MEC data
- IoT communications
๐ Integration with i2net
import net2i
results = net2i.encode('original_traffic.csv')
import i2net.decoder as decoder
decoded_results = decoder.load_data('data', 'reconstructed_traffic.csv')
๐ ๏ธ Technical Implementation
- Load CSV and detect column types
- Separate IPv4 and IPv6 rows
- Encode each value by type (MAC/IP/float/string)
- Use IEEE 754 encoding for floats
- Map values to RGB pixels
- Assemble square images
๐ฏ Image Size Recommendations
| CNN Architecture | Recommended Size |
|---|---|
| Default | 150ร150 |
| ResNet, VGG | 224ร224 |
| Inception | 299ร299 |
| Custom | Match your model |
๐จ Troubleshooting
- No IPs detected: Check your CSV contains valid IPs
- Corrupt images: Set
clean_existing=True - Memory errors: Lower image size or batch processing
๐ฅ๏ธ CLI Usage
python net2i.py network_traffic.csv
python net2i.py firewall_logs.csv cnn_images 224
python net2i.py # Show help
๐ Citation
@inproceedings{fernando2023new,
title={New algorithms for the detection of malicious traffic in 5g-mec},
author={Fernando, Omesh A and Xiao, Hannan and Spring, Joseph},
booktitle={2023 IEEE Wireless Communications and Networking Conference (WCNC)},
pages={1--6},
year={2023},
organization={IEEE}
}
๐ฅ Author
- Omesh Fernando
๐ License
MIT License
๐ Related
- i2net: Reverse net2i images
- IEEE WCNC 2023 Paper
๐ค Contributing
- Fork repo
- Create a branch
- Add tests
- Commit
- Push
- PR
๐ฌ Support
- GitHub Issues
net2i.help()- i2net
๐ Tip: net2i images are lossless and fully reversible with i2net.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file net2i-2.4.tar.gz.
File metadata
- Download URL: net2i-2.4.tar.gz
- Upload date:
- Size: 15.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ea8aac0cc3ca7492d90bd7a0c314fa3aef02aed051e062fe0b4e975d5fe733d
|
|
| MD5 |
e600051334aa33e3ef4c33a543aac05c
|
|
| BLAKE2b-256 |
e5fa0b0fb6ecfa418281ed63816d902daad577aff24670520a81c73420d438ac
|
File details
Details for the file net2i-2.4-py3-none-any.whl.
File metadata
- Download URL: net2i-2.4-py3-none-any.whl
- Upload date:
- Size: 12.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bf7e845a6e2138972041f95c1cb1ef14cb7e88b4a0a92dde4067498b0df23f66
|
|
| MD5 |
b4e87fd5a936f3d0a85d578d52b3364c
|
|
| BLAKE2b-256 |
5b13c2acde8887f85814fb6a0ada72c6dd3ad62600a9cc11f8b7ce161f78ebc2
|