🎯 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
⚙️ 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:
- Uso de AsyncSniffer de Scapy para captura asíncrona
- Procesamiento por lotes de 1000 paquetes para optimización
- Rotación automática de archivos PCAP con timestamps
- Interfaz gráfica basada en QThread para evitar bloqueo de UI
- Manejo de excepciones para robustez del sistema
Clases Principales:
- SnifferThread: Maneja la captura en un hilo separado
- SniffApp: Interfaz gráfica principal
- packet_to_dict: Conversión de paquetes Scapy a documentos MongoDB
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:
- sort_by_timestamp(): Orden cronológico por tiempo de captura
- sort_by_tcp_sequence(): Ordenamiento por números de secuencia TCP
- sort_by_conversation(): Agrupación por conversaciones bidireccionales
Funcionalidades Avanzadas:
- Filtrado dinámico por IPs de origen y destino
- Resolución DNS automática con caché
- Visualización de estadísticas protocolarias
- Exportación de resultados ordenados
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:
- Carga de paquetes desde MongoDB
- Generación de estadísticas base
- Ordenamiento por timestamp
- Ordenamiento por secuencia TCP
- Ordenamiento conversacional
- 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
- Seleccionar interfaz de red del listado desplegable
- Hacer clic en "Start Sniffing"
- Observar los paquetes en tiempo real en el área de texto
- Hacer clic en "Stop Sniffing" cuando se termine
Análisis con Interfaz Gráfica
python3 ordenar_paquetes.py
- Clic en "Load Packets from MongoDB"
- Filtrar opcionalmente por IPs (campos opcionales)
- Clic en "Filter and Display Conversations"
- 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"