📡 Sniff: Analizador de Paquetes de Red

Manual de Empleo Completo

🎯 Introducción

Sniff es una herramienta avanzada de análisis de paquetes de red desarrollada en Python que permite capturar, almacenar y organizar tráfico de red para análisis forense detallado. El proyecto consta de tres componentes principales que ofrecen tanto interfaces gráficas como de línea de comandos.

🔍 sniff.py

Aplicación principal de captura en tiempo real con interfaz gráfica.

  • Captura de paquetes en vivo
  • Soporte multi-interfaz
  • Almacenamiento dual (MongoDB + PCAP)
  • Interfaz gráfica PySide6

📊 ordenar_paquetes.py

Analizador gráfico para organizar paquetes almacenados.

  • Múltiples métodos de ordenamiento
  • Filtrado avanzado por IP
  • Resolución DNS automática
  • Análisis conversacional

⚡ ordenar_paquetes_sin_entorno_grafico.py

Versión de línea de comandos para procesamiento automatizado.

  • Procesamiento por lotes
  • Generación automática de estadísticas
  • Exportación a JSON
  • Optimizado para servidores

Capturas de Pantalla

Sniff Interface Screenshot 0 Sniff Interface Screenshot 1 Sniff Interface Screenshot 2 Sniff Interface Screenshot 3

⚙️ Requisitos del Sistema

Software Requerido

Componente Versión Mínima Descripción
Python 3.7+ Lenguaje de programación principal
MongoDB 4.0+ Base de datos para almacenamiento de paquetes
Sistema Operativo Linux/MacOS/Windows Múltiples plataformas soportadas

Dependencias Python

pip install PySide6>=6.0.0 # Framework de interfaz gráfica
pip install scapy>=2.4.0 # Biblioteca de manipulación de paquetes
pip install pymongo>=4.0.0 # Driver para MongoDB
⚠️ IMPORTANTE: Para captura de paquetes en Linux, necesitarás permisos de administrador y configurar las capacidades de red apropiadas.

📦 Instalación y Configuración

Paso 1: Instalación de MongoDB

MongoDB es requerido para almacenar los paquetes capturados. Instala la versión Community Server gratuita.

Ubuntu/Debian:

sudo apt update
sudo apt install -y mongodb
sudo systemctl start mongodb
sudo systemctl enable mongodb

CentOS/RHEL:

sudo yum install -y mongodb
sudo systemctl start mongod
sudo systemctl enable mongod

MacOS:

brew install mongodb-community
brew services start mongodb-community

Windows:

Descarga el instalador MSI desde mongodb.com

Paso 2: Clonación del Proyecto

cd /home/nito/Documentos/desarrollo/python
git clone https://github.com/bgonpin/sniff.git
cd sniff

Paso 3: Configuración del Entorno Virtual

python3 -m venv venv
source venv/bin/activate # Linux/Mac
# En Windows: venv\Scripts\activate
pip install --upgrade pip

Paso 4: Instalación de Dependencias

pip install pyside6 scapy pymongo

Paso 5: Configuración de Permisos (Linux)

Para capturar paquetes, Python necesita acceso a sockets raw. Configura las capacidades de red apropiadas.
sudo setcap cap_net_raw=eip $(which python3)
# Si usas venv, ejecuta desde el directorio del proyecto:
sudo setcap cap_net_raw=eip venv/bin/python3

Paso 6: Verificación de Instalación

python3 -c "import PySide6.QtWidgets; import scapy.all; import pymongo; print('✓ Todas las dependencias instaladas correctamente')"
✅ Verificación de MongoDB:
mongosh # o mongo en versiones anteriores
use network_sniffing
db.packets.find().limit(1)

📝 Documentación de Scripts

1. sniff.py - Capturador de Paquetes Principal

Función: Captura paquetes de red en tiempo real y los almacena tanto en MongoDB como en archivos PCAP.

Características Técnicas:

Clases Principales:

2. ordenar_paquetes.py - Analizador Gráfico

Función: Analiza y organiza paquetes almacenados en MongoDB con interfaz gráfica completa.

Métodos de Ordenamiento:

Funcionalidades Avanzadas:

3. ordenar_paquetes_sin_entorno_grafico.py - Versión CLI

Función: Procesamiento por lotes de paquetes sin interfaz gráfica, ideal para servidores y automatización.

Flujo de Ejecución Automático:

  1. Carga de paquetes desde MongoDB
  2. Generación de estadísticas base
  3. Ordenamiento por timestamp
  4. Ordenamiento por secuencia TCP
  5. Ordenamiento conversacional
  6. Exportación a JSON

🚀 Guía de Uso

Uso Básico - Captura de Paquetes

cd /ruta/a/sniff
source venv/bin/activate
python3 sniff.py
  1. Seleccionar interfaz de red del listado desplegable
  2. Hacer clic en "Start Sniffing"
  3. Observar los paquetes en tiempo real en el área de texto
  4. Hacer clic en "Stop Sniffing" cuando se termine

Análisis con Interfaz Gráfica

python3 ordenar_paquetes.py
  1. Clic en "Load Packets from MongoDB"
  2. Filtrar opcionalmente por IPs (campos opcionales)
  3. Clic en "Filter and Display Conversations"
  4. Ver resultados organizados por conversación

Procesamiento Automatizado (CLI)

python3 ordenar_paquetes_sin_entorno_grafico.py

Este script procesa automáticamente todos los paquetes:

--- Estadísticas ---
Total de paquetes: 2500
Paquetes TCP: 1800
Protocolos encontrados:
TCP: 1800
UDP: 650
ICMP: 50

Ejemplo de Salida de Diálogo TCP

Conversación: 192.168.1.100:54321 <-> github.com:443
1. SEQ: 1000 [SYN] envía host cliente
2. SEQ: 2000 [SYN,ACK] responde servidor
3. SEQ: 1001 [ACK] confirma cliente
4. SEQ: 1002 [ACK] envía datos cliente
5. SEQ: 2001 [ACK] confirma y envía respuesta servidor

🔧 Solución de Problemas

Problema 1: "Permission denied" al iniciar captura

Error: No se pueden capturar paquetes sin permisos administrativos.
# Solución - Otorgar capacidades a Python:
sudo setcap cap_net_raw=eip venv/bin/python3

# Verificar:
getcap venv/bin/python3

Problema 2: "Connection refused" con MongoDB

Error: MongoDB no está ejecutándose o no acepta conexiones.
# Verificar estado del servicio:
sudo systemctl status mongod

# Iniciar si está parado:
sudo systemctl start mongod

# Verificar conectividad:
mongosh --eval "db.runCommand('ping')"

Problema 3: "ModuleNotFoundError" para dependencias

Error: Falta alguna dependencia de Python.
# Asegurarse de usar el entorno virtual:
source venv/bin/activate

# Reinstalar dependencias:
pip install --force-reinstall pyside6 scapy pymongo

Problema 4: No se muestran interfaces de red

Error: Scapy no puede detectar interfaces disponibles.
# Verificar interfaces disponibles:
python3 -c "from scapy.all import get_if_list; print(get_if_list())"

# Ejecutar como administrador:
sudo python3 sniff.py

Problema 5: Aplicación GUI no responde

Problema: La interfaz se congela durante la captura intensiva.
# Solución: Ajustar límites de captura
# En sniff.py línea ~45
if len(self.packets) == 1000: # Cambiar a 500 para procesar más frecuentemente

Problema 6: Memoria insuficiente

Problema: Acumulando muchos paquetes en memoria.
# Usar procesamiento CLI con límites:
python3 -c "from ordenar_paquetes_sin_entorno_grafico import PacketSorter; sorter = PacketSorter(); sorter.load_packets(limit=5000); sorter.sort_by_conversation()"

⚙️ Configuración Avanzada

Configuración de MongoDB Personalizada

# En cualquier script, modificar la inicialización:
sorter = PacketSorter(
mongo_uri="mongodb://usuario:password@localhost:27017",
db_name="mi_base_datos"
)

Ajuste de Lotes de Procesamiento

# En sniff.py línea ~52:
BATCH_SIZE = 1000 # Ajustar según capacidad del sistema
SAVE_INTERVAL_SECONDS = 60 # Forzar guardado periódico

Configuración de Captura

# Filtros opcionales para Scapy:
FILTERS = {
'tcp': 'tcp port 80 or tcp port 443',
'udp': 'udp port 53',
'icmp': 'icmp'
}

Personalización de Salida

# Configurar formatos de timestamp:
TIMESTAMP_FORMAT = "%Y-%m-%d %H:%M:%S.%f"
FILENAME_FORMAT = "{timestamp}_capture.pcap"

Variables de Entorno

export MONGODB_URI="mongodb://localhost:27017"
export NETWORK_DB="network_sniffing"
export PCAP_DIR="/var/log/pcaps"
export LOG_LEVEL="INFO"