
Un framework para el análisis de tráfico de red y la extracción de características.
LUCX (LUCID network traffic parser eXtended) es un analizador de tráfico de red que funciona tanto con trazas de tráfico pregrabadas en formato pcap como con tráfico de red en vivo capturado desde una interfaz de red. LUCX es una versión extendida del analizador del conjunto de datos LUCID (https://github.com/doriguzzi/lucid-ddos). Al igual que la versión original, LUCX produce observaciones de tráfico consistentes con las recopiladas en los sistemas en línea existentes, donde los algoritmos de detección deben hacer frente a segmentos de flujos de tráfico recopilados durante ventanas de tiempo predefinidas.
Además, LUCX extrae más características (por ejemplo, características específicas de TLS) en dos formatos diferentes: Packet-Level y Statistical, descritos más adelante en este README.
Las operaciones de preprocesamiento del tráfico se dividen en dos etapas diferentes: la primera extrae las características de los paquetes y las organiza en flujos y ventanas de tiempo; la segunda realiza la normalización de características, el padding (o el aplanado, según el formato de salida deseado) y guarda los conjuntos de entrenamiento, validación y prueba en formato hdf5.
El Sistema de Detección de Intrusiones de Red (NIDS) de ejemplo, proporcionado en este repositorio como un cuaderno de Jupyter, puede utilizarse para entrenar y evaluar modelos de Deep Learning (concretamente un Perceptrón Multicapa (MLP) o una Red Neuronal Convolucional (CNN)) utilizando tanto representaciones de tráfico de red a nivel de paquete como estadísticas generadas por LUCX.
LUCX está implementado en Python v3.X, Numpy y Pyshark. LUCX requiere la instalación de una serie de herramientas y bibliotecas de Python. Esto puede hacerse utilizando el entorno de software conda (https://docs.conda.io/projects/conda/en/latest/).
Sugerimos la instalación de miniconda, una versión ligera de conda. miniconda está disponible para MS Windows, MacOSX y Linux y puede instalarse siguiendo las directrices disponibles en https://docs.conda.io/en/latest/miniconda.html#.
Se requiere MS Windows 10 versión 2004 o superior (Build 19041 o superior) o Windows 11.
En MS Windows, instale primero el subsistema de Windows para Linux desde la línea de comandos: wsl.exe —install (consulte aquí para más información). Este comando instalará un sistema operativo Ubuntu Linux en su ordenador. Puede acceder a la línea de comandos de Linux ejecutando la aplicación WSL desde el menú de Windows y, a continuación, seguir las directrices para el sistema operativo Linux que se indican a continuación.
Abra un terminal, ejecute uno de los siguientes comandos (según su sistema operativo) y siga las instrucciones que aparezcan en pantalla:
bash Miniconda3-latest-Linux-x86_64.sh (on Linux operating systems)
bash Miniconda3-latest-MacOSX-x86_64.sh (on macOS)
Luego crea un nuevo entorno conda (llamado python313) basado en Python 3.13.5:
conda create -n python313 python=3.13.5
Activa el nuevo entorno python313:
conda activate python313
Y configura el entorno con la instalación de algunos paquetes más:
(python39)$ pip install scikit-learn h5py pyshark matplotlib graphviz pandas scikeras pydot seaborn
Pyshark se utiliza para el preprocesamiento de datos. Es solo un wrapper de Python para tshark, lo que significa que tshark también debe estar instalado. En un sistema operativo basado en Ubuntu, utilice el siguiente comando:
sudo apt install tshark
En macOS, simplemente descarga Wireshark desde aquí e instálalo.
Ten en cuenta que el código actual del analizador funciona con wireshark/tshark versión 4.4.9 o superior.
LUCX considera flujos de tráfico de red bidireccionales, definidos como grupos de paquetes que comparten el mismo identificador de 5‑tupla o su 5‑tupla transpuesta. La 5‑tupla es una forma común de caracterizar de manera única un flujo de comunicación en redes IP, y consta de:
Cuando los paquetes tienen valores idénticos para estos cinco campos, se consideran parte del mismo flujo. El concepto de 5‑tupla transpuesta tiene en cuenta la comunicación bidireccional: si las direcciones/puertos de origen y destino se intercambian pero el protocolo sigue siendo el mismo, los paquetes siguen considerándose parte del mismo flujo. Esto garantiza que ambas direcciones de una conversación (cliente → servidor y servidor → cliente) se agrupen juntas.
Ejemplo: Supongamos que un cliente en la IP 192.168.1.10 envía una solicitud TCP a un servidor web en la IP 203.0.113.5 en el puerto 80. El cliente utiliza el puerto de origen 54321.
Ambos conjuntos de paquetes pertenecen al mismo flujo de tráfico porque la dirección inversa coincide con la 5‑tupla transpuesta de la dirección directa. Además, LUCX divide cada flujo de tráfico extraído de las trazas de tráfico de red de un conjunto de datos (o del tráfico de red entrante) en subflujos basados en ventanas de tiempo. Esta segmentación simula escenarios del mundo real en los que el tráfico se recopila dentro de ventanas de tiempo estáticas o dinámicas y luego se reenvía a un clasificador para su análisis. De este modo, el sistema refleja las prácticas operativas de los sistemas de detección de intrusiones (IDS), que a menudo dependen de la agregación de paquetes delimitada en el tiempo para identificar comportamientos a corto plazo y detectar ataques.
Después de que los paquetes se agrupan en flujos y los flujos se dividen a su vez en subflujos, LUCX convierte los subflujos en muestras que pueden utilizarse para entrenar, validar y probar clasificadores basados en ML. Hay dos formatos de salida posibles: arreglos (como en LUCID) o vectores. El primer formato conserva las características extraídas directamente de los paquetes, mientras que el segundo produce representaciones estadísticas de las características a nivel de paquete. Estos dos modos operativos se denominan características a nivel de paquete y características estadísticas, respectivamente.