This commit is contained in:
Jérôme Bousquié 2018-11-29 12:19:57 +01:00
parent ea79501557
commit 1398cc4090
9 changed files with 420 additions and 8 deletions

View File

@ -0,0 +1,81 @@
<?php
header ('Content-Type: text/html; charset=utf-8');
// Affichage de la configuration en cours dans Winlog
include_once('winlog_admin_conf.php');
include_once('connexions.php');
include_once('session.php');
// connexion LDAP à l'AD
$ldap_con = ldap_connect($ldap_host, $ldap_port);
$ldap_auth = ldap_bind($ldap_con, $ldap_rdn, $ldap_passwd);
$test_ldap = "Échec";
if ($ldap_auth) {
$test_ldap = "OK";
};
// connexion à la base de donnée
$conn = db_connect();
$test_db = "OK";
if ($conn->connect_errno) {
$test_db = "Échec de connexion à la base : " . $conn->connect_error;
}
// accès au fichier ping
$fichier = fopen($fichier_ping, "r+");
$test_fichier_ping = "Échec, fichier non accessible";
if ($fichier) {
$test_fichier_ping = "OK";
}
$username = Username();
$profil = Profil($username);
FiltreProfil($profil);
$role = $roles[$profil];
?>
<!DOCTYPE HTML>
<html lang="fr">
<head>
<title>Winlog</title>
<meta charset="utf-8">
<link rel="stylesheet" media="screen" type="text/css" title="default" href="default.css">
</head>
<body>
<p class="header">WINLOG-R</p>
<p>compte : <i><?php echo($username); ?></i><br/>rôle : <i><?php echo($role); ?></i></p>
<br/>
<?php
if ($profil == $niveaux[$roles[3]]) { ?>
<h3>Serveur Winlog</h3>
<p>Mode d'authentification activé : <b><?php echo($auth_mode) ?></b></p>
<p>URL d'administration de Winlog : <b><?php echo($winlog_url ) ?></b></p>
<p>URL de collecte des requêtes des PC du parc : <b><?php echo($server_url) ?></b></p>
<p>Code partagé dans la requête : <b><?php echo($server_code) ?></b></p>
<br/>
<h3>Serveur Active Directory</h3>
<p>Nom ou adresse du serveur AD : <b><?php echo($ldap_host) ?></b></p>
<p>Port du serveur AD : <b><?php echo($ldap_port) ?></b></p>
<p>DN d'authentification LDAP sur le serveur AD : <b><?php echo($ldap_rdn) ?></b></p>
<!-- <p>Mot de passe associé : <b><?php //echo($ldap_passwd) ?></b></p> -->
<p>Test connexion LDAP : <b><?php echo($test_ldap); ?></b></p>
<p>Base de recherche AD des salles informatiques : <b><?php echo($base_salles) ?></b></p>
<p>Base de recherche AD des PC des personnels : <b><?php echo($base_salles_personnel) ?></b></p>
<p>Base de recherche AD des personnels/enseignants : <b><?php echo($base_enseignants) ?></b></p>
<p>Base de recherche AD des étudiants : <b><?php echo($base_etudiants) ?></b></p>
<p>Les OU à exclure de la recherche des comptes : <b><?php print_r($OU_personnes_exclusion) ?></b></p>
<p>Les OU à exclure de la recherche des machines : <b><?php print_r($OU_machines_exclusion) ?></b></p>
<br/>
<h3>MySQL</h3>
<p>Test de connexion à la base : <b><?php echo($test_db); ?></b></p>
<i>à compléter ...</i>
<br/>
<h3>Ping</h3>
<p>Fichier liste des adresses IP : <b><?php echo($fichier_ping); ?></b></p>
<p>Test accès fichier : <b><?php echo($test_fichier_ping); ?></b></p>
<?php
}
?>
<p><a href="index.php">Retour menu principal</a></p>
<p class="footer">version <?php echo($winlog_version); ?></p>
</body>
</html>

180
admin/ping/liste_ip.txt Executable file
View File

@ -0,0 +1,180 @@
10.2.14.15
10.2.14.20
10.2.14.21
10.2.14.25
10.2.14.11
10.2.13.12
10.2.13.39
10.2.13.16
10.2.13.15
10.2.13.19
10.2.13.17
10.2.13.18
10.2.13.14
10.2.13.13
10.2.13.26
10.2.13.21
10.2.13.22
10.2.13.25
10.2.13.24
10.2.13.23
10.2.13.27
10.2.13.28
10.2.13.30
10.2.13.29
10.2.13.31
10.2.13.32
10.2.13.38
10.2.13.37
10.2.13.36
10.2.13.35
10.2.13.33
10.2.13.20
10.2.8.12
10.2.8.13
10.2.8.14
10.2.8.17
10.2.8.19
10.2.8.18
10.2.8.20
10.2.8.21
10.2.8.22
10.2.8.24
10.2.8.26
10.2.8.25
10.2.8.29
10.2.8.30
10.2.8.31
10.2.8.32
10.2.8.33
10.2.8.34
10.2.8.37
10.2.8.38
10.2.8.42
10.2.7.18
10.2.7.21
10.2.7.19
10.2.7.23
10.2.7.34
10.2.7.37
10.2.7.36
10.2.7.24
10.2.7.22
10.2.7.26
10.2.7.35
10.2.7.38
10.2.7.30
10.2.7.33
10.2.7.29
10.2.7.32
10.2.7.20
10.2.7.31
10.2.7.16
10.2.7.17
10.2.11.11
10.2.11.26
10.2.11.25
10.2.11.24
10.2.11.18
10.2.11.19
10.2.11.20
10.2.11.21
10.2.11.33
10.2.11.34
10.2.11.40
10.2.13.11
10.2.3.30
10.2.3.29
10.2.21.21
10.2.8.11
10.2.7.39
10.2.6.38
10.2.6.37
10.2.6.39
10.2.6.31
10.2.6.34
10.2.6.35
10.2.6.27
10.2.6.32
10.2.6.21
10.2.6.28
10.2.6.22
10.2.6.26
10.2.6.23
10.2.6.20
10.2.6.18
10.2.6.25
10.2.6.17
10.2.6.19
10.2.6.11
10.2.6.14
10.2.6.16
10.2.6.15
10.2.6.24
10.2.6.29
10.2.6.36
10.2.6.13
10.2.10.39
10.2.21.11
10.2.21.40
10.2.21.14
10.2.21.15
10.2.21.16
10.2.21.17
10.2.21.20
10.2.21.29
10.2.21.28
10.2.21.27
10.2.21.26
10.2.21.25
10.2.21.24
10.2.21.23
10.2.21.22
10.2.21.37
10.2.21.36
10.2.21.35
10.2.21.34
10.2.21.33
10.2.21.32
10.2.21.31
10.2.21.30
10.2.21.18
10.2.21.19
10.2.1.38
10.2.1.37
10.2.1.39
10.2.1.16
10.2.1.17
10.2.1.15
10.2.1.18
10.2.1.21
10.2.1.20
10.2.1.19
10.2.1.12
10.2.1.14
10.2.1.26
10.2.1.22
10.2.1.25
10.2.1.11
10.2.1.24
10.2.1.23
10.2.1.33
10.2.1.28
10.2.1.32
10.2.1.34
10.2.1.29
10.2.1.13
10.2.17.18
192.168.0.238
192.168.0.235
192.168.0.63
192.168.0.174
192.168.0.199
192.168.0.47
192.168.0.48
192.168.0.119
192.168.0.120
192.168.0.135
192.168.0.132
192.168.0.123
192.168.0.20

37
admin/ping/liste_ping.txt Executable file
View File

@ -0,0 +1,37 @@
2018-11-29 12:19:23
10.2.14.15
10.2.14.20
10.2.14.21
10.2.14.25
10.2.14.11
10.2.1.38
10.2.1.37
10.2.1.39
10.2.1.17
10.2.1.15
10.2.1.18
10.2.1.21
10.2.1.20
10.2.1.19
10.2.1.12
10.2.1.14
10.2.1.26
10.2.1.22
10.2.1.25
10.2.1.11
10.2.1.24
10.2.1.23
10.2.1.33
10.2.1.28
10.2.1.32
10.2.1.34
10.2.1.29
10.2.1.13
192.168.0.174
192.168.0.199
192.168.0.47
192.168.0.48
192.168.0.135
192.168.0.132
192.168.0.123
10.2.6.36

0
admin/ping/ping_error.log Executable file
View File

42
admin/ping/winlog_ping.sh Executable file
View File

@ -0,0 +1,42 @@
#!/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.
# 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
# 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'
exit 1
fi;
fichierIN=$1
fichierOUT=$2
timeout=$3
if [ ! -e $fichierIN ]; then
echo 'Erreur : fichier '$1' non trouvé.'
exit 1
fi;
if [ ! -e $fichierOUT ]; then
echo 'Erreur : fichier '$2' 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
while :
do
actives=`fping -t$timeout -f$fichierIN | grep alive | cut -d ' ' -f1`
timestamp=$(date +"%Y-%m-%d %H:%M:%S")
echo $timestamp>$fichierOUT
i=0
for ip in $actives
do
echo $ip >> $fichierOUT
i=$(($i+1))
done
echo $timestamp " : " $i "réponses au ping"
done

31
admin/ping/winlog_start_ping.sh Executable file
View File

@ -0,0 +1,31 @@
#!/bin/bash
# Usage : winlog_ping.sh fichier_adresses_ip fichier_adresses_pinguées timeout
# 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'
exit 1
fi;
fichierIN=$1
fichierOUT=$2
timeout=$3
if [ ! -e $fichierIN ]; then
echo 'Erreur : fichier '$1' non trouvé.'
exit 1
fi;
if [ ! -e $fichierOUT ]; then
echo 'Erreur : fichier '$2' 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`
do
kill -9 $proc
done
# Lancement de winlog_ping.sh en arrière plan
/var/www/html/admin/ping/winlog_ping.sh $fichierIN $fichierOUT $timeout &

View File

@ -30,8 +30,8 @@ $ldap_auth = ldap_bind($ldap_con, $ldap_rdn, $ldap_passwd);
// Fonction d'écriture des adresses IP des machines dans le fichier liste_ip
Function Liste_ip_fichier(&$db) {
global $fichier_ping;
$fichier = fopen($fichier_ping, "w");
global $fichier_liste_ip;
$fichier = fopen($fichier_liste_ip, "w");
if ($fichier) {
$req_recup_ip = "SELECT DISTINCT adresse_ip FROM machines WHERE adresse_ip <>''";
$res = db_query($db, $req_recup_ip);
@ -41,8 +41,26 @@ Function Liste_ip_fichier(&$db) {
db_free($res);
fclose($fichier);
}
};
// 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_start_ping;
global $winlog_ping_error;
global $winlog_ping_debug;
$redirect = ' > /dev/null';
if ($winlog_ping_debug) {
$redirect = ' >> '. $winlog_ping_error;
}
$command = $winlog_start_ping . ' ' . $fichier_liste_ip . ' ' . $fichier_liste_ping . ' ' . $ping_timeout . $redirect . ' 2>&1';
//echo $command;
exec($command);
};
// Fonction d'insertion des machines dans la base de données à partir des base, filtre et attributs LDAP
// $salles est explicitement passé par référence
// retourne le nombre d'enregistrements ajoutés dans la base
@ -73,10 +91,14 @@ function Insere_machines(&$ldap_con, $ldap_base, $ldap_filtre, &$ldap_attr, &$ex
$os_version = db_escape_string($db, $entry[$i]["operatingsystemversion"][0]);
}
// requête permettant de mettre à jour les adresses IP à partir des connexions ouvertes
$req_adresses = "UPDATE machines INNER JOIN connexions ON machines.machine_id = connexions.hote SET machines.adresse_ip = connexions.ip WHERE connexions.close=0;";
$req_machine_insert = "INSERT INTO machines (machine_id, salle, os, os_sp, os_version) VALUES ('{$machine_id}', '{$nom_salle}', '{$os}', '{$os_sp}', '{$os_version}')";
$req_machine_update = "INSERT INTO machines (machine_id, salle, os, os_sp, os_version) VALUES ('{$machine_id}', '{$nom_salle}', '{$os}', '{$os_sp}', '{$os_version}') ON DUPLICATE KEY UPDATE salle = '{$nom_salle}', os = '{$os}', os_sp = '{$os_sp}', os_version = '{$os_version}'";
$req_machine = ($update) ? $req_machine_update : $req_machine_insert;
db_query($db, $req_machine);
db_query($db, $req_adresses);
$count = $count + 1;
}
return $count;
@ -102,8 +124,10 @@ foreach ($ldap_machines as $ldap_branche) {
$nb_total = $nb_total + $nb;
}
// ajout des adresses IP déjà collectée dans le fichier des adresses IP
// Ajout des adresses IP déjà collectées dans le fichier des adresses IP et lancement du démon de ping
// ===================================================================================================
Liste_ip_fichier($db);
Lance_demon_ping();
// Insertion des salles à partir du tableau $salles remplis par Insere_machines()
// ==============================================================================
@ -130,9 +154,12 @@ ldap_close($ldap_con);
<p class="header">WINLOG</p>
<h3>Récupération des machines et des salles</h3>
<p>Ce traitement vient de récupérer les machines et les salles depuis le serveur Active Directory.<br/>
Les informations relatives aux machines et aux salles (noms des salles ou des machines, adresses IP, etc) préalablement dans la base Winlog viennent d'être effacées.</p>
<?php
if (!$update) { ?>
Les informations relatives aux machines et aux salles (noms des salles ou des machines, adresses IP, etc) préalablement dans la base Winlog viennent d'être effacées.<?php } ?></p>
<p>Nombre de machines chargées dans la base : <?php echo($nb_total); ?><br/>
Nombre de salles chargées dans la base : <?php echo($nb_salles); ?><p>
<p>Le démon de ping des machines vient d'être relancé.</p>
<p><a href="index.php">Retour menu principal</a></p>
<p class="footer">version <?php echo($winlog_version); ?></p>
</body>

View File

@ -137,7 +137,20 @@ $trombino_defaut_url = "http://lamp.iut.rdz/trombi/vr_tn_IUT_Rodez.jpg";
// extension fichier image : le fichier image est de la forme username.extension
$trombino_extension_fichier = ".jpg";
// Ping
// Fichier de la liste d'adresses IP à pinger
$fichier_ping = "ping/liste_ip.txt";
// Ping : s'appuie sur la commande système fping
// NOTE : tous les chemins doivent être absolus !
// fichier de la liste d'adresses IP à pinger (fichierIN), doit être accessible en lecture/écriture
$fichier_liste_ip = "/var/www/html/admin/ping/liste_ip.txt";
// ficher de la liste des adresses ayant répondu au ping (fichierOUT), doit être accessible en lecture/écriture
$fichier_liste_ping = "/var/www/html/admin/ping/liste_ping.txt";
// timeout si pas de réponse au ping en milliseconde
$ping_timeout = 100;
// fichier bash de lancement du démon, doit être éxecutable (ne pas modifier)
$winlog_start_ping = "/var/www/html/admin/ping/winlog_start_ping.sh";
// fichier bash du démon pinger, doit être éxecutable (ne pas modifier)
$winlog_ping = "/var/www/html/admin/ping/winlog_ping.sh";
// fichier de log
$winlog_ping_error = "/var/www/html/admin/ping/ping_error.log";
// mode debug : mettre à true pour voir les erreur dans ŵinlog_ping_error.log
$winlog_ping_debug = false;
?>

View File

@ -36,6 +36,7 @@ if ( $_SERVER["REQUEST_METHOD"] == "POST" && $_SERVER["SERVER_PORT"] == "443" &&
case "D":
db_query($db, $req_con_D); // déconnexion
db_query($db, $req_ip_machine); // update IP de la machine
PostURL($rpc_url, array('act'=>'k', 'host'=>$computer));
PostURL($rpc_url, array('act'=>'p', 'host'=>$computer)); // start processus distant
break;