Rétro-ingénierie du protocole inform UniFi pour le routage multi-locataire

Structure du protocole UniFi inform
Chaque appareil UniFi (points d'accès, commutateurs, passerelles) contacte son contrôleur via HTTP POST sur le port 8080 toutes les 10 secondes. Cela gère les statistiques des appareils, la synchronisation des configurations, les versions du micrologiciel et le nombre de clients. Bien que la charge utile soit chiffrée en AES-128-CBC, l'en-tête contient l'identification de l'appareil en texte clair.
Détails de l'en-tête des paquets
Les 40 premiers octets de chaque paquet inform sont non chiffrés :
Décalage Taille Champ ────── ───── ────────────────────────── 0 4B Magique : "TNBU" (0x544E4255) 4 4B Version du paquet (actuellement 0) 8 6B Adresse MAC de l'appareil 14 2B Drapeaux (chiffré, compressé, etc.) 16 2B Longueur du vecteur d'initialisation AES 18 16B Vecteur d'initialisation AES 34 4B Version des données 38 4B Longueur de la charge utile 42+ var Charge utile chiffrée (AES-128-CBC)
L'adresse MAC au décalage d'octet 8 est complètement non chiffrée. "TNBU" est "UBNT" à l'envers (symbole boursier d'Ubiquiti et identifiants SSH par défaut).
Extraction de l'adresse MAC et routage
L'extraction de l'adresse MAC nécessite un code minimal :
header := make([]byte, 40)
if _, err := io.ReadFull(conn, header); err != nil {
return err
}
if string(header[0:4]) != "TNBU" {
return fmt.Errorf("pas un paquet inform")
}
mac := fmt.Sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
header[8], header[9], header[10],
header[11], header[12], header[13])Avec l'adresse MAC en main, le routage devient simple : maintenez une table faisant correspondre les adresses MAC aux locataires, puis transférez l'intégralité du paquet (en-tête et charge utile chiffrée inchangés) vers le backend correct. Le proxy peut être implémenté en environ 200 lignes de Go avec une table de recherche MAC-vers-locataire en mémoire.
Aperçu des ports du contrôleur
Les autres ports du contrôleur incluent :
- 8443 TCP/HTTPS : Interface web et API
- 3478 UDP : STUN
- 6789 TCP : Test de vitesse (interne)
- 27117 TCP : MongoDB (interne)
- 10001 UDP : Découverte L2 (local uniquement)
Le routage basé sur l'adresse MAC sert principalement de solution de secours pour des cas particuliers, comme les appareils qui n'ont pas encore été reconfigurés ou les appareils réinitialisés d'usine en cours de réadoption. Une fois adoptés, les appareils peuvent être dirigés vers des sous-domaines spécifiques aux locataires en utilisant le routage standard de l'en-tête Host.
📖 Lire la source complète : HN AI Agents
👀 See Also

rawq : Outil CLI Local pour la Recherche Sémantique de Code par Agent IA
rawq est un outil CLI open-source qui aide les agents d'IA à trouver du code pertinent en utilisant la recherche sémantique avec un modèle local de 33MB via ONNX runtime et la recherche lexicale BM25 via tantivy. Lors des tests, les agents d'IA utilisant rawq ont consommé 4 fois moins de tokens et ont terminé les tâches 2 fois plus vite comparé aux outils de lecture/recherche aveugles.

gui.new : Outil permettant à Claude de générer des sorties visuelles sous forme de liens partageables
gui.new est un outil qui permet à Claude de générer des sorties visuelles sous forme de liens partageables en direct au lieu de renvoyer des blocs de code. Il est construit avec Claude, utilise Next.js sur Vercel avec Supabase, et ne nécessite aucune inscription.

Eqho : Application locale de reconnaissance vocale pour les sessions de code Claude
Eqho est une application gratuite et open-source de reconnaissance vocale qui utilise localement le modèle Whisper d'OpenAI pour saisir la parole dans n'importe quelle application active. Actuellement réservée à Windows, elle nécessite une configuration en ligne de commande.

Claude-Code v2.1.63 ajoute des crochets HTTP, des commandes slash et corrige les fuites de mémoire.
Claude-Code v2.1.63 introduit des hooks HTTP pour des appels externes basés sur JSON, ajoute les commandes slash /simplify et /batch, et corrige plusieurs fuites de mémoire dans les sessions de longue durée. Cette version améliore également la gestion des serveurs MCP et l'intégration avec VSCode.