Ce projet vient répondre aux besoins du Coding Club d'EPITECH.
Lors d'un Coding Club, de nombreux participants viennent s'essayer à la programmation. Les "Cobras", formés sur le sujet, encadrent l'événement.
Dans le cadre de certains sujets, il est intéressant pour les encadrants de pouvoir lancer des tests fonctionnels (moulinettes) sur le travail des participants pour en estimer l'avancée.
Deux solutions s'offrent Ă nous :
- Créer un exécutable obfusqué, simple d'exécution que chaque participant pourrait lancer.
- Transférer le travail vers une de nos machines pour exécuter les tests localement.
La premiÚre solution posait différents problÚmes :
- L'exécutable doit pouvoir marcher sur n'importe quel OS
- L'excutable nécessite généralement des dépendances et plusieurs fichiers
- Les participants peuvent ĂȘtre amenĂ©s Ă travailler sur leur PC et ne veulent pas forcĂ©ment installer des tonnes de fichiers et dĂ©pendances
- Les encadrants n'ont aucun accÚs aux résultats de ces tests sans consulter le PC du participant
Nous nous sommes naturellement tournés vers la deuxiÚme solution.
HTTP Remote est un programme conçu spécialement pour le Coding Club, il n'est pas un exemple de sécurité pour le monde de l'entreprise par exemple mais pour le cadre de ces ateliers, la sécurité est suffisante.
HTTP Remote tire profit de la permissivité du réseau LAN. Il est composé de trois parties :
- Un serveur principal (un PC d'encadrant)
- Des clients (les PC des participants)
- Un panel d'administration (sur le PC serveur)
Le script client est adapté à Windows, MacOS et Linux. Il n'a que trÚs peu de dépendances et se lance trÚs simplement.
Le script serveur va recevoir les connexions entrantes des scripts clients. Par cette connexion, le serveur va mémoriser les adresses IP locales de chaque ordinateurs clients.
Les scripts clients vont en suite lancer un serveur HTTP sur la machine du participant. Ce serveur pourra recevoir des requĂȘtes du serveur principal et transmettre le contenu des fichiers de travail du participant.
L'objectif n'est pas d'espionner le PC du participant. Un intervenant ne pourra pas consulter les dossiers parents au working directory du script client.
Le panel, lui, envoie des requĂȘtes authentifiĂ©es au serveur principal. Le serveur questionnera Ă son tour le client ciblĂ© et retournera les informations demandĂ©es...
Une fois le Coding Club terminé, le participant pourra simplement supprimer le script client de son ordinateur, celui-ci ne laissera aucune trace de son passage sur la machine.
Pour commencer, il convient de sĂ©lĂ©ctionner un poste de travail qui servira de serveur. Ce poste doit ĂȘtre en capacitĂ© d'exposer son port 8888 au rĂ©seau local et ĂȘtre connectĂ© au mĂȘme rĂ©seau que tous les poste clients.
Le serveur doit posséder le CLI php8.1 et le nécessaire pour executer les moulinettes (Python3 et ses librairies généralement).
Il est fortement recommandé d'utiliser une distribution Linux sur le poste serveur, de préférence basée sur Debian/Ubuntu.
La commande ci-dessous permet de démarrer le serveur:
./start_server.sh
Votre console indiquera:
Served on <ip>:8888
Il important de retenir l'IP indiquée, il s'agit de l'addresse locale du poste serveur. Il sera nécessaire de la renseigner lors de l'installation client.
Il faudra transférer le fichier client.py
(uniquement ce fichier), aux différents postes clients. Ce script est compatible avec tous les systÚmes d'exploitations et ne nécessite aucune dépendance Python.
Le poste client doit posséder Python3.8 ou supérieur.
Le poste doit ĂȘtre en mesure d'exposer son port 8887 (voit la section Troubleshooting en cas de problĂšme).
Pour démarrer le script client, il convient d'ouvrir un terminal dans le dossier de travail du participant et d'executer la commande suivante :
python3 client.py <ip>
L'IP à renseigner étant celle indiquée précedemment par le serveur (sans le port).
Le PC serveur (et uniquement lui) pourra accéder à une interface graphique en chargeant le fichier panel/index.html
dans son navigateur (directement en double-cliquant dessus, sans le servir sur un port).
Depuis cette interface, l'administrateur pourra consulter le travail des participants en temps réel, lancer une moulinette et consulter le resultat des tests.
Les differents PC clients pourront accéder à l'URL http://<ip>:8888/trace
pour consulter les resultats de leur derniÚre moulinette (L'IP à renseigner étant celle indiquée précedemment par le serveur)
- Si le client affiche "Connecté" mais ne s'affiche pas sur le panel
Ajouter le port au firewall :
firewall-cmd --zone=public --add-port=8887/tcp
- Si il est impossible d'utiliser le port sur Windows et qu'aucune fenĂȘtre de parefeu ne s'ouvre, executez le CMD en tant qu'Administrateur et rĂ©essayez.