From 08c55abf1578c7c669bf299d8253ebf3aabaa220 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Bousqui=C3=A9?= Date: Fri, 30 Nov 2018 12:08:38 +0100 Subject: [PATCH] ping conf + get_ping.php --- admin/ldap_conf.example.php | 2 +- admin/ping/winlog_ping.conf | 7 ++++++ admin/ping/winlog_ping.sh | 32 ++++++++++++++----------- admin/ping/winlog_start_ping.sh | 26 ++++++++++++--------- admin/recup_salles.php | 36 +++++++++++++++++++++++++---- admin/winlog_admin_conf.php.example | 13 +++++++++-- winlog.sql | 31 +++++++++++++++++++------ 7 files changed, 107 insertions(+), 40 deletions(-) create mode 100755 admin/ping/winlog_ping.conf diff --git a/admin/ldap_conf.example.php b/admin/ldap_conf.example.php index e637ce7..a84aeba 100644 --- a/admin/ldap_conf.example.php +++ b/admin/ldap_conf.example.php @@ -9,5 +9,5 @@ $auth_ldap_basedn = "DC=iut,DC=local"; // D $auth_ldap_port = "636"; // port du serveur : 636 (ldaps) recommandé $auth_ldap_attribut_identifier = "sAMAccountName"; // attribut identifiant d'un compte dans l'annuaire $auth_ldap_AD = true; // le serveur LDAP est-il un serveur AD ? - = "Veuillez vous authentifier avec votre compte et votre mode passe Windows"; // message sur le formulaire d'authentification LDAP +$auth_ldap_message = "Veuillez vous authentifier avec votre compte et votre mode passe Windows"; // message sur le formulaire d'authentification LDAP ?> diff --git a/admin/ping/winlog_ping.conf b/admin/ping/winlog_ping.conf new file mode 100755 index 0000000..a77af9f --- /dev/null +++ b/admin/ping/winlog_ping.conf @@ -0,0 +1,7 @@ +# Fichier de configuration du démon ping de Winlog +# fichier généré par Winlog, ne pas modifier manuellement +fichierIN=/var/www/html/admin/ping/liste_ip.txt +fichierOUT=/var/www/html/admin/ping/liste_ping.txt +timeout=100 +pathPHP=/usr/bin/php5 +getPing=/var/www/html/admin/get_ping.php diff --git a/admin/ping/winlog_ping.sh b/admin/ping/winlog_ping.sh index d9b02f7..c5699b9 100755 --- a/admin/ping/winlog_ping.sh +++ b/admin/ping/winlog_ping.sh @@ -1,42 +1,46 @@ #!/bin/bash -# Usage : winlog_ping.sh fichier_adresses_ip fichier_adresses_pinguées timeout -# Ce script lit le fichier des adresses IP produit par Winlog, nom du fichier passé en paramètre. +# Usage : winlog_ping.sh fichier_ping.conf +# Ce script lit le fichierIN des adresses IP produit par Winlog. # Pour chaque adresse récupérée, il effectue un fping. -# Si le fping répond, un timestamp est mis à jour sur la ligne de l'adresse IP dans le fichier. -# timeout par défaut = 100ms +# Si le fping répond, une ligne est ajoutée dans le fichierOUT. La première ligne du fichier est le timestamp de fin du ping global. # Test arguments -if [[ ! $# -eq 3 ]]; then - echo 'Erreur de paramètres : les noms des fichiers de la liste des adresses IP et des adresses ayant répondu au ping et la durée du timeout du ping en ms.' - echo 'Usage : winlog_ping.sh fichierIN_adresses_ip fichierOUT_adresses_pinguées' +if [[ $# -eq 0 ]]; then + echo 'Erreur de paramètres : le fichier de configuration du ping doit être passé' + echo 'Usage : winlog_start_ping.sh fichier_ping.conf' exit 1 fi; -fichierIN=$1 -fichierOUT=$2 -timeout=$3 -if [ ! -e $fichierIN ]; then +# Source de la configuration et tests fichiers +if [ ! -e $1 ]; then echo 'Erreur : fichier '$1' non trouvé.' exit 1 fi; +source $1; +if [ ! -e $fichierIN ]; then + echo 'Erreur : fichier '$fichierIN' non trouvé.' + exit 1 +fi; if [ ! -e $fichierOUT ]; then - echo 'Erreur : fichier '$2' non trouvé.' + echo 'Erreur : fichier '$fichierOUT' non trouvé.' exit 1 fi; # Boucle infinie : fping sur chaque adresse du fichier -# La première ligne écrite dans le fichier est le timestamp # Si réponse ping, alors ajout de l'adresse dans le fichier OUT # fping -t$timeout -f$fichier | grep alive | cut -d ' ' -f1 : récupère les ip alive depuis fping +# Une fois le fichier rempli, on exécute admin/get_ping.php qui va récupérer le contenu du fichier dans la base Winlog while : do actives=`fping -t$timeout -f$fichierIN | grep alive | cut -d ' ' -f1` timestamp=$(date +"%Y-%m-%d %H:%M:%S") - echo $timestamp>$fichierOUT + >$fichierOUT i=0 for ip in $actives do echo $ip >> $fichierOUT i=$(($i+1)) done + requetePing=$pathPHP' '$getPing + eval $requetePing echo $timestamp " : " $i "réponses au ping" done \ No newline at end of file diff --git a/admin/ping/winlog_start_ping.sh b/admin/ping/winlog_start_ping.sh index 46b80aa..9de59cf 100755 --- a/admin/ping/winlog_start_ping.sh +++ b/admin/ping/winlog_start_ping.sh @@ -1,25 +1,29 @@ #!/bin/bash -# Usage : winlog_ping.sh fichier_adresses_ip fichier_adresses_pinguées timeout +# Usage : winlog_ping.sh fichier_ping.conf # Ce script lance le shell winlog_ping.sh en arrière plan et rend la main aussitôt. # Il arrête auparavant les éventuels processus de winlog_ping.sh. # Test arguments -if [[ ! $# -eq 3 ]]; then - echo 'Erreur de paramètres : les noms des fichiers de la liste des adresses IP et des adresses ayant répondu au ping et la durée du timeout du ping en ms.' - echo 'Usage : winlog_start_ping.sh fichierIN_adresses_ip fichierOUT_adresses_pinguées' +if [[ $# -eq 0 ]]; then + echo 'Erreur de paramètres : le fichier de configuration du ping doit être passé' + echo 'Usage : winlog_start_ping.sh fichier_ping.conf' exit 1 fi; -fichierIN=$1 -fichierOUT=$2 -timeout=$3 -if [ ! -e $fichierIN ]; then +# Source de la configuration et tests fichiers +if [ ! -e $1 ]; then echo 'Erreur : fichier '$1' non trouvé.' exit 1 fi; -if [ ! -e $fichierOUT ]; then - echo 'Erreur : fichier '$2' non trouvé.' +source $1; +if [ ! -e $fichierIN ]; then + echo 'Erreur : fichier '$fichierIN' non trouvé.' exit 1 fi; +if [ ! -e $fichierOUT ]; then + echo 'Erreur : fichier '$fichierOUT' non trouvé.' + exit 1 +fi; + # Arrêt des éventuels processus actifs de winlog_ping for proc in `ps -ej | grep winlog_ping | grep -v grep | cut -d ' ' -f1` @@ -28,4 +32,4 @@ do done # Lancement de winlog_ping.sh en arrière plan -/var/www/html/admin/ping/winlog_ping.sh $fichierIN $fichierOUT $timeout & \ No newline at end of file +/var/www/html/admin/ping/winlog_ping.sh $1 & \ No newline at end of file diff --git a/admin/recup_salles.php b/admin/recup_salles.php index 19e3ab2..c31165a 100644 --- a/admin/recup_salles.php +++ b/admin/recup_salles.php @@ -28,6 +28,33 @@ $req_purge_salle = "TRUNCATE salles"; $ldap_con = ldap_connect($ldap_host, $ldap_port); $ldap_auth = ldap_bind($ldap_con, $ldap_rdn, $ldap_passwd); +// Fonction de création du fichier de configuration du démon ping +Function Configuration_ping() { + global $winlog_ping_conf; + global $fichier_liste_ip; + global $fichier_liste_ping; + global $ping_timeout; + global $php_path; + global $winlog_get_ping; + $fichier = fopen($winlog_ping_conf, "w"); + if ($fichier) { + $cr = "\n"; + $lignes = [ + "# Fichier de configuration du démon ping de Winlog".$cr, + "# fichier généré par Winlog, ne pas modifier manuellement".$cr, + "fichierIN=".$fichier_liste_ip.$cr, + "fichierOUT=".$fichier_liste_ping.$cr, + "timeout=".$ping_timeout.$cr, + "pathPHP=".$php_path.$cr, + "getPing=".$winlog_get_ping.$cr + ]; + foreach($lignes as $ligne) { + fwrite($fichier, $ligne); + } + fclose($fichier); + } +}; + // Fonction d'écriture des adresses IP des machines dans le fichier liste_ip Function Liste_ip_fichier(&$db) { global $fichier_liste_ip; @@ -45,9 +72,7 @@ Function Liste_ip_fichier(&$db) { // Fonction de lancement du démon de ping Function Lance_demon_ping() { - global $fichier_liste_ip; - global $fichier_liste_ping; - global $ping_timeout; + global $winlog_ping_conf; global $winlog_start_ping; global $winlog_ping_error; global $winlog_ping_debug; @@ -56,7 +81,7 @@ Function Lance_demon_ping() { $redirect = ' >> '. $winlog_ping_error; } - $command = $winlog_start_ping . ' ' . $fichier_liste_ip . ' ' . $fichier_liste_ping . ' ' . $ping_timeout . $redirect . ' 2>&1'; + $command = $winlog_start_ping . ' ' . $winlog_ping_conf . $redirect . ' 2>&1'; //echo $command; exec($command); }; @@ -126,7 +151,8 @@ foreach ($ldap_machines as $ldap_branche) { // Ajout des adresses IP déjà collectées dans le fichier des adresses IP et lancement du démon de ping // =================================================================================================== -if ($winlog_start_ping != "") { +if ($mode_ping) { + Configuration_ping(); Liste_ip_fichier($db); Lance_demon_ping(); } diff --git a/admin/winlog_admin_conf.php.example b/admin/winlog_admin_conf.php.example index 4d4c81d..fa26c78 100644 --- a/admin/winlog_admin_conf.php.example +++ b/admin/winlog_admin_conf.php.example @@ -1,6 +1,6 @@ diff --git a/winlog.sql b/winlog.sql index d024a84..feef910 100644 --- a/winlog.sql +++ b/winlog.sql @@ -3,7 +3,7 @@ -- http://www.phpmyadmin.net -- -- Client : localhost --- Généré le : Mar 13 Décembre 2016 à 15:35 +-- Généré le : Ven 30 Novembre 2018 à 10:26 -- Version du serveur : 5.5.53-0+deb8u1 -- Version de PHP : 5.6.27-0+deb8u1 @@ -32,7 +32,7 @@ CREATE TABLE IF NOT EXISTS `comptes` ( `prenom` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `nom` varchar(30) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL, `groupe` varchar(25) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL -) ENGINE=MyISAM AUTO_INCREMENT=890 DEFAULT CHARSET=utf8; +) ENGINE=MyISAM AUTO_INCREMENT=928 DEFAULT CHARSET=utf8; -- -------------------------------------------------------- @@ -49,7 +49,7 @@ CREATE TABLE IF NOT EXISTS `connexions` ( `debut_con` timestamp NULL DEFAULT '0000-00-00 00:00:00', `close` tinyint(1) NOT NULL DEFAULT '1', `archivable` tinyint(1) NOT NULL DEFAULT '0' -) ENGINE=MyISAM AUTO_INCREMENT=38044 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=MyISAM AUTO_INCREMENT=193000 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -------------------------------------------------------- @@ -77,6 +77,17 @@ CREATE TABLE IF NOT EXISTS `machines` ( -- -------------------------------------------------------- +-- +-- Structure de la table `ping` +-- + +CREATE TABLE IF NOT EXISTS `ping` ( + `machine_id` varchar(15) COLLATE utf8_unicode_ci NOT NULL, + `ping_timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT='table des réponses au ping de chaque machine'; + +-- -------------------------------------------------------- + -- -- Structure de la table `proxy` -- @@ -127,7 +138,7 @@ CREATE TABLE IF NOT EXISTS `wifi` ( `wifi_browser` varchar(160) COLLATE utf8_unicode_ci NOT NULL, `wifi_deb_conn` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `close` tinyint(4) NOT NULL DEFAULT '0' -) ENGINE=MyISAM AUTO_INCREMENT=316 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; +) ENGINE=MyISAM AUTO_INCREMENT=96340 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci; -- -- Index pour les tables exportées @@ -151,6 +162,12 @@ ALTER TABLE `connexions` ALTER TABLE `machines` ADD PRIMARY KEY (`machine_id`); +-- +-- Index pour la table `ping` +-- +ALTER TABLE `ping` + ADD PRIMARY KEY (`machine_id`); + -- -- Index pour la table `salles` -- @@ -177,17 +194,17 @@ ALTER TABLE `wifi` -- AUTO_INCREMENT pour la table `comptes` -- ALTER TABLE `comptes` -MODIFY `compte_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=890; +MODIFY `compte_id` int(11) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=928; -- -- AUTO_INCREMENT pour la table `connexions` -- ALTER TABLE `connexions` -MODIFY `con_id` bigint(20) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=38044; +MODIFY `con_id` bigint(20) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=193000; -- -- AUTO_INCREMENT pour la table `wifi` -- ALTER TABLE `wifi` -MODIFY `wifi_id` bigint(20) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=316; +MODIFY `wifi_id` bigint(20) NOT NULL AUTO_INCREMENT,AUTO_INCREMENT=96340; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;