TFG · 2020C2020

El problema

Clasificar tráfico de red sin mirar el contenido de los paquetes: inferir qué tipo de tráfico atraviesa una interfaz a partir de características del propio flujo —tamaños, tiempos, frecuencias— en lugar del payload.

Enfoque

Un pipeline con dos mitades que se hablan por un socket UDP local:

  • C, multihilo: hilos separados para captura, análisis y muestreo. El sniffer captura con pcap y filtro BPF sobre la interfaz que le indiques; un buffer circular pasa los paquetes al sampler, que calcula 15 features por muestra y las envía por UDP a localhost:4545.
  • Python: el módulo de ML recibe las muestras, las desempaqueta con struct y las clasifica con un Random Forest cargado con joblib, devolviendo la predicción por el mismo socket.

Separar captura y clasificación deja el camino crítico en C (donde el coste por paquete importa) y el modelo en Python (donde está el ecosistema de ML).

Resultados

Prototipo funcional de clasificación de tráfico en tiempo real, presentado como trabajo de fin de grado en Ingeniería Informática (UPV/EHU, 2020).

Cómo se reproduce

El repositorio incluye el sniffer, el sampler, el buffer circular, el analizador, el módulo de ML y el modelo entrenado comprimido (RF_Classifier.tar.xz). El módulo de Python espera las features por UDP en el puerto 4545 y el modelo descomprimido como RF_Classifier.sav.

Límites

Lo escribí en 2020 y hoy lo haría distinto: no tiene README ni instrucciones de compilación, el modelo entrenado va en un .tar.xz versionado en el repo (su sitio es Releases), el requirements.txt es un freeze del entorno de entonces y hay un sniffer.c duplicado en la raíz. El clasificador está entrenado sobre un conjunto de datos concreto que no acompaña al repositorio, así que sus predicciones no son comparables fuera de él.