Ingeniería inversa del protocolo inform de UniFi para el enrutamiento multiinquilino

Estructura del protocolo inform de UniFi
Cada dispositivo UniFi (puntos de acceso, switches, gateways) se comunica con su controlador mediante HTTP POST al puerto 8080 cada 10 segundos. Esto maneja estadísticas del dispositivo, sincronización de configuración, versiones de firmware y recuentos de clientes. Aunque la carga útil está cifrada con AES-128-CBC, la cabecera contiene identificación del dispositivo en texto plano.
Detalles de la cabecera del paquete
Los primeros 40 bytes de cada paquete inform están sin cifrar:
Desplazamiento Tamaño Campo ────── ───── ────────────────────────── 0 4B Magic: "TNBU" (0x544E4255) 4 4B Versión del paquete (actualmente 0) 8 6B Dirección MAC del dispositivo 14 2B Banderas (cifrado, comprimido, etc.) 16 2B Longitud del IV AES 18 16B IV AES 34 4B Versión de datos 38 4B Longitud de la carga útil 42+ var Carga útil cifrada (AES-128-CBC)
La dirección MAC en el desplazamiento de byte 8 está completamente sin cifrar. "TNBU" es "UBNT" al revés (símbolo bursátil de Ubiquiti y credenciales SSH por defecto).
Extracción de MAC y enrutamiento
Extraer la MAC requiere un código mínimo:
header := make([]byte, 40)
if _, err := io.ReadFull(conn, header); err != nil {
return err
}
if string(header[0:4]) != "TNBU" {
return fmt.Errorf("no es un paquete inform")
}
mac := fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
header[8], header[9], header[10],
header[11], header[12], header[13])Con la MAC en mano, el enrutamiento se vuelve simple: mantener una tabla que mapee direcciones MAC a inquilinos, luego reenviar todo el paquete (cabecera y carga útil cifrada sin modificar) al backend correcto. El proxy se puede implementar en unas 200 líneas de Go con una tabla de búsqueda MAC-a-inquilino en memoria.
Resumen de puertos del controlador
Otros puertos del controlador incluyen:
- 8443 TCP/HTTPS: Interfaz web y API
- 3478 UDP: STUN
- 6789 TCP: Prueba de velocidad (interno)
- 27117 TCP: MongoDB (interno)
- 10001 UDP: Descubrimiento L2 (solo local)
El enrutamiento basado en MAC sirve principalmente como respaldo para casos límite como dispositivos que aún no han sido reconfigurados o dispositivos restablecidos de fábrica que se readoptan. Una vez adoptados, los dispositivos pueden apuntarse a subdominios específicos del inquilino utilizando enrutamiento estándar de cabecera Host.
📖 Read the full source: HN AI Agents
👀 Ver también

Marco de Código Abierto Utiliza CLI de Claude Code para Monitoreo Automatizado de Repositorios de GitHub
Un desarrollador ha liberado como código abierto un marco de trabajo que ejecuta Claude Code CLI en un cronograma cron para triar la actividad de GitHub en múltiples repositorios. La herramienta incluye seguimiento de estado, deduplicación, notificaciones de Discord y un sistema de preverificación que evita costos de API cuando no ha habido cambios.
Habilitar SELECT: Ejecutar consultas SQL en resultados de búsqueda web
Keenable SELECT es un servidor MCP que te permite consultar la web con SQL. Una sola llamada puede buscar más de 1,000 páginas, filtrar con cláusulas WHERE exactas y extraer campos mediante LLM, todo en una única sentencia SELECT.

VSCode-Perplexity-MCP: Usa tu cuenta de Perplexity para búsqueda gratuita de IA en VS Code
Un servidor MCP de código abierto que te permite conectar tu cuenta de Perplexity.ai a VS Code, brindando a Clawbot capacidades de búsqueda, razonamiento y cómputo sin pagar por solicitud de API.

Agente OpenClaw Adquiere Capacidad de Llamadas Telefónicas Mediante Habilidad Personalizada
Un desarrollador creó una habilidad personalizada para agentes OpenClaw autoalojados que permite la funcionalidad de llamadas telefónicas, permitiendo al agente iniciar llamadas basadas en desencadenantes como finalizaciones de compilación o caídas de servidores. La implementación proporciona interacción por voz con todas las capacidades de chat, incluyendo búsquedas web y configuración de alertas.