Basándome en el enunciado del trabajo práctico y los archivos proporcionados, te ayudo a crear un roadmap y análisis de los componentes existentes.
Análisis del Enunciado
El proyecto requiere implementar un servidor proxy SOCKSv5 con los siguientes requerimientos principales:
Requerimientos Funcionales:
- Atender 500+ clientes concurrentes
- Autenticación usuario/contraseña (RFC1929)
- Conexiones TCP a IPv4/IPv6/FQDN
- Métricas y monitoreo
- Configuración en tiempo de ejecución
- Registro de accesos
- Monitoreo de credenciales POP3
Requerimientos No Funcionales:
- C11 con sockets no bloqueantes multiplexados
- Performance y escalabilidad
- Protocolo de monitoreo/configuración
- Cliente de administración
Análisis de Archivos Proporcionados
Infraestructura Base
src/selector.c/h
- CRÍTICO
- Multiplexor I/O no bloqueante (select/poll/epoll)
- Manejo de eventos de lectura/escritura
- Soporte para trabajos bloqueantes en hilos separados
- Uso: Base fundamental para manejar 500+ conexiones concurrentes
src/stm.c/h
- CRÍTICO
- Motor de máquina de estados
- Integración con selector para eventos
- Uso: Implementar estados del protocolo SOCKS5 (auth, request, relay)
src/buffer.c/h
- ESENCIAL
- Buffer circular con punteros de lectura/escritura
- Manejo eficiente de I/O parcial
- Uso: Buffering de datos entre cliente y servidor destino
Utilidades de Red
src/netutils.c/h
- ÚTIL
- Conversión de direcciones a formato humano
- Copia bloqueante entre sockets
- Uso: Logging, debugging, relay de datos
src/shared/util.c/h
- ÚTIL
- Utilidades para manejo de addrinfo
- Comparación de direcciones
- Uso: Resolución DNS, manejo de múltiples IPs
Parsing y Protocolos
src/parser.c/h
- IMPORTANTE
- Motor de parsing basado en estados
- Uso: Parsear mensajes SOCKS5 y protocolo de administración
src/parser_utils.c/h
- ÚTIL
- Utilidades para comparación de strings
- Uso: Parsing de comandos, autenticación
Logging y Debugging
src/shared/logger.c/h
- ESENCIAL
- Sistema de logging con niveles
- Uso: Registro de accesos, debugging, métricas
Testing y Ejemplos
src/test/
- REFERENCIA
- Tests unitarios para componentes
- Uso: Validar implementación, ejemplos de uso
src/client/
- REFERENCIA
- Cliente TCP/UDP de ejemplo
- Uso: Base para cliente de administración
Servidor Base
src/server/
- PUNTO DE PARTIDA
- Implementación básica de SOCKS5
- Uso: Expandir para cumplir todos los requerimientos
️ Roadmap de Implementación
Fase 1: Fundamentos (Semanas 1-2)
Estudiar implementación SOCKS5 existente
- Analizar
src/server/socks5.c
- Identificar limitaciones vs requerimientos
Refactorizar para usar selector
- Migrar de implementación bloqueante a no-bloqueante
- Integrar con
selector.c
y stm.c
Implementar máquina de estados SOCKS5
Fase 2: Protocolo SOCKS5 Completo (Semanas 3-4)
Autenticación usuario/contraseña (RFC1929)
- Usar
parser.c
para mensajes de auth - Base de datos de usuarios en memoria
Manejo robusto de conexiones
- Múltiples IPs por FQDN
- Manejo de errores completo
- IPv4/IPv6 support
Relay de datos eficiente
- Usar
buffer.c
para buffering - Copia bidireccional no bloqueante
Fase 3: Métricas y Monitoreo (Semanas 5-6)
Sistema de métricas
- Conexiones históricas/concurrentes
- Bytes transferidos
- Estadísticas por usuario
Protocolo de administración
- Diseñar protocolo custom
- Usar
parser.c
para comandos - Socket separado para admin
Cliente de administración
- Basado en
src/client/tcpClientUtil.c
- Comandos: stats, users, config
Fase 4: Características Avanzadas (Semanas 7-8)
Configuración en tiempo real
- Agregar/remover usuarios
- Cambiar parámetros
- Reload sin reinicio
Logging de accesos
- Extender
logger.c
- Formato estructurado
- Rotación de logs
Monitoreo POP3 (Segunda entrega)
- Interceptar tráfico
- Extraer credenciales
- Usar
parser.c
para protocolo POP3
Fase 5: Performance y Testing (Semanas 9-10)
Optimización
- Profiling y bottlenecks
- Memory pools
- Tuning de buffers
Testing de stress
- 500+ conexiones concurrentes
- Medición de throughput
- Pruebas de estabilidad
Documentación
- Informe técnico
- Guías de instalación
- Ejemplos de uso
Integración de Componentes
Los archivos proporcionados forman una base sólida para implementar el servidor SOCKS5. El selector y la máquina de estados son los componentes más críticos, mientras que los parsers y buffers proporcionan las herramientas necesarias para manejar los protocolos de manera eficiente.