Skip to main content

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 data
  • output_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 images
  • image_size: Image dimensions (width ร— height) - tune for your CNN architecture
  • types_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 configuration
  • reset_config(): Reset to default settings
  • help(): 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

  1. Load CSV and detect column types
  2. Separate IPv4 and IPv6 rows
  3. Encode each value by type (MAC/IP/float/string)
  4. Use IEEE 754 encoding for floats
  5. Map values to RGB pixels
  6. 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

๐Ÿค Contributing

  1. Fork repo
  2. Create a branch
  3. Add tests
  4. Commit
  5. Push
  6. 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

net2i-2.5.tar.gz (13.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

net2i-2.5-py3-none-any.whl (10.1 kB view details)

Uploaded Python 3

File details

Details for the file net2i-2.5.tar.gz.

File metadata

  • Download URL: net2i-2.5.tar.gz
  • Upload date:
  • Size: 13.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for net2i-2.5.tar.gz
Algorithm Hash digest
SHA256 85686b4845b251b5d3b3f95e899c5d3c2fe6efb7eff0b783ba04b99bd64baefa
MD5 c42acf6e065f12c3cd761f1354a9f2a2
BLAKE2b-256 70d77a3a117febe4532a3cee1ead27f40b10700deeb252829cc7bdc27a4c2184

See more details on using hashes here.

File details

Details for the file net2i-2.5-py3-none-any.whl.

File metadata

  • Download URL: net2i-2.5-py3-none-any.whl
  • Upload date:
  • Size: 10.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.9

File hashes

Hashes for net2i-2.5-py3-none-any.whl
Algorithm Hash digest
SHA256 dfeabfa753447ce6b6e03660cd9fe208a777d3206d9f1d08e52932ab65c775a3
MD5 8b2cec6c8dd01a06122c1cbaa52cb78f
BLAKE2b-256 1fc940a9ca8fdf6274640ef9783429bf4689206d59a0d6626dab7dd4a22f4b12

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page