KConnect — connexion et découverte Berkios
KConnect donne à KPartage son transport réseau : il trouve les appareils voisins, échange les cartes pour l'appairage et achemine les messages de partage. Il s'appuie sur TCP + UDP sur une adresse IP locale, donc sur toute liaison qui en fournit une. Il est branché sur le moteur KPartage du même dossier de travail (même identité, mêmes appareils).
Ce que KConnect fait et ne fait pas
| Liaison | Statut | Précision |
|---|---|---|
| Wi-Fi (même réseau) | ✅ disponible | découverte par balises UDP + TCP |
| Ethernet | ✅ disponible | idem |
| Point d'accès mobile (hotspot) | ⚠️ indirect | le système crée le point d'accès ; KConnect l'utilise ensuite comme un réseau IP. Berkios ne le crée pas : cela demande des droits système et une commande système, que les commandes Berkios n'exécutent pas |
| Wi-Fi Direct | ⚠️ indirect | une fois le groupe formé par le système, l'interface a une IP et KConnect la voit. La négociation du groupe n'est pas pilotable depuis Node : plugin d'hôte requis |
| Bluetooth | ❌ hôte requis | pas de pile Bluetooth dans le Bridge Node. Option immédiate : partage de connexion Bluetooth (PAN) du système → IP. Option native : l'application hôte fournit un transport respectant le contrat de KPartage (send, onReceive) |
connect-liaisons classe les interfaces (wifi, ethernet, hotspot, wifi-direct, bluetooth) d'après leur nom et sous-réseau — c'est une estimation, marquée estime: true. connect-liaison-instructions <type> donne la marche à suivre exacte. KConnect n'inclut pas non plus de transfert de gros fichiers : c'est KTransfer.
Sécurité
- Invisible par défaut. Aucune balise n'est émise tant que
visiblen'est pas activé ; un appareil invisible refuse même les demandes de carte. - Réseau local uniquement (10/8, 172.16/12, 192.168/16, lien local, boucle locale, IPv6 ULA) en entrant comme en sortant ; adresses IP littérales seulement (pas de noms d'hôte).
- Appairage par fenêtre : un voisin ne peut échanger sa carte que pendant une fenêtre ouverte par l'utilisateur (10 s à 10 min, 10 échanges maximum). Les appareils s'affichent ensuite le même code à 6 chiffres à confirmer (voir KPartage).
- Trames chiffrées (AES-256-GCM, clé dérivée de la clé de lien, direction liée) pour tout appareil vérifié : un faux point d'accès ne lit rien, et sa réponse non authentifiée est rejetée (
reponse_non_authentique). - Balises usurpables, donc jamais crues : si l'adresse d'un appareil vérifié change, KConnect ne bascule qu'après un ping scellé réussi.
- Limites : 32 connexions simultanées, 120 requêtes/min/adresse, trames ≤ 2 Mio, délai 10 s, longueur annoncée contrôlée avant toute allocation.
Non protégé : les échanges avec un appareil non vérifié circulent en clair (ils ne sont ni chiffrés ni signés) : n'y envoyez rien de sensible. Un pair malveillant du réseau local peut aussi saturer un port d'écoute ouvert (déni de service) ; n'activez connect-demarrer que quand l'utilisateur partage.
Utilisation
Commandes : voir COMMANDES.md (14 commandes, permissions connect.read / connect.manage).
import { KPartage } from '../kpartage/src/index.mjs';
import { KConnect } from './src/index.mjs';
const partage = new KPartage({ workspace: './mon-dossier', nom: 'Mon PC' });
const kc = new KConnect(partage);
await kc.demarrer({ visible: true }); // TCP 47600, UDP 47601
kc.ouvrirAppairage(120); // côté receveur
const voisins = await kc.rechercher(); // côté émetteur
const appareil = await kc.appairer(voisins[0].id); // → { codeAppairage: '123 456', … } à comparerÉvénements : demarre, arrete, voisin, appairage-recu (avec le code à afficher).
Intégration
KConnect est le transport de KPartage (attacherTransport). Il n'est pas compatible avec les appareils simulés de KPartage (transport mémoire) : l'un des deux à la fois (transport_actif). Le transfert des fichiers acceptés (fetch) est fourni par KTransfer ; en attendant, partage-recu-element-terminer vérifie un fichier déposé par un autre moyen.
Tests : npm test (vrais sockets TCP/UDP sur la boucle locale). Non testé : réseaux réels, plusieurs interfaces, pare-feux, IPv6.
Cette page en Markdown · llms.txt · documentation complète pour les IA