winlog/admin/connexions.php
2016-09-27 10:59:15 +02:00

248 lines
9.2 KiB
PHP

<?php
include_once('winlog_admin_conf.php');
include_once('db_access.php');
// Fonction : Connexions_par_salle
// Renvoie les connexions par salle sous la forme d'un Array
function Connexions_par_salle($salle) {
$machine_de_salle = Machines_de_salle(Machines());
$machines_de_ma_salle = $machine_de_salle[$salle];
$machines_connectees = Connexion_machine();
$connexions_par_salle = array();
if (!empty($machines_connectees)) {
$i = 0;
foreach($machines_de_ma_salle as $machine) {
$connexions_par_salle[$i] = array();
$connexions_par_salle[$i]["machine"] = $machine;
$connexions_par_salle[$i]["username"] = $machines_connectees[$machine]["username"];
$connexions_par_salle[$i]["stamp"] = $machines_connectees[$machine]["stamp"];
$connexions_par_salle[$i]["ip"] = $machines_connectees[$machine]["ip"];
$i++;
}
}
return $connexions_par_salle;
}
// Fonction : Machines()
// Renvoie toutes les machines existantes
// Retourne un tableau associatif : machines[$machine_id] = ($salle, $os, $os_sp, $os_version, $ip_fixe)
function Machines() {
//$machines = array() ;
$db = db_connect();
$req = 'select machine_id, salle, os, os_sp, os_version from machines order by salle, machine_id';
$res = db_query($db, $req);
while ($mac = db_fetch_row($res)) {
$machines[$mac[0]] = array($mac[1], $mac[2], $mac[3], $mac[4]);
}
db_free($res);
return $machines;
}
// Fonction : Machines_de_salle($machines)
// Renvoie les machines existantes des salles du tableau $machine (si le tableau est vide, alors appel à Machines()
// Retourne un tableau associatif machines_de_salle[$salle_id]=($machine_id1, $machine_id2, ...)
// En fait, cette fonction inverse le tableau associatif de la fonction machine sur la clé $salle
function Machines_de_salle($machines) {
$machines_de_salle = array() ;
if (!$machines ) { $machines = Machines(); }
while ($mac = current($machines)) {
$machines_de_salle[$mac[0]][] = key($machines);
next($machines);
}
return $machines_de_salle;
}
// Fonction Connexion_machine()
// Renvoie un tableau associatif des machines connectées:
// connexion_machines[$machine_id]["username"] = $username
// connexion_machines[$machine_id]["ip"] = $ip
// connexion_machines[$machine_id]["stamp"] = $stamp
function Connexion_machine() {
$connexion_machine = array();
$connexions = Connexions();
if (!empty($connexions)) {
foreach($connexions as $con) {
$connexion_machine[$con["hote"]] = array();
$connexion_machine[$con["hote"]]["username"] = $con["username"];
$connexion_machine[$con["hote"]]["ip"] = $con["ip"];
$connexion_machine[$con["hote"]]["stamp"] = $con["stamp"];
}
}
return $connexion_machine;
}
// Fonction Compte($username)
// Renvoie les informations sur l'utilisateur du compte
// Retourne un array (nom, prenom, groupe)
function Compte($username) {
$db = db_connect();
$req = "SELECT nom, prenom, groupe FROM comptes WHERE username=\"{$username}\"";
$res = db_query($db, $req);
$compte = db_fetch_row($res);
db_free($res);
return $compte;
}
// Fonction : Con_ip($ip)
// Renvoie les informations de la connexion en cours relative à l'IP donnée
// Retourne un array (con_id, username, hote, stamp, nom, prenom, groupe)
function Con_ip($ip) {
$con = Connexions();
$con_ip = array();
$i = 0;
$count = count($con);
while($i < $count) {
if ($con[$i]["ip"] == $ip ) {
$cpt = Compte($con[$i]["username"]);
$con_ip = array($con[$i]["con_id"], $con[$i]["username"], $con[$i]["hote"], $con[$i]["stamp"], $cpt[0], $cpt[1], $cpt[2]);
break;
}
$i++;
}
return $con_ip;
}
// Fonction : Connexions()
// Renvoie les connexions windows en cours du jour
// Retourne un array indexé de connexions :
// con[i]["con_id"] : id de connexion dans la table connexions
// con[i]["username"] : login windows
// con[i]["hote"] : nom de la machine
// con[i]["stamp"] : timestamp unix de la connexion
// con[i]["ip"] : adresse IP de la machine
function Connexions() {
$connexions = array();
$db = db_connect();
$req = 'select con_id, username, hote, unix_timestamp(debut_con), ip from connexions where close=0 and (to_days(now())-to_days(debut_con)<1) order by username';
$res = db_query($db, $req);
$i = 0;
while ($con = db_fetch_row($res)) {
$connexions[$i] = array();
$connexions[$i]["con_id"] = $con[0];
$connexions[$i]["username"] = $con[1];
$connexions[$i]["hote"] = $con[2];
$connexions[$i]["stamp"] = $con[3];
$connexions[$i]["ip"] = $con[4];
$i++;
}
db_free($res);
return $connexions;
}
// Fonction Derniere_connexion_machine($hote)
// Renvoie les informations sur la dernière connexion sur la machine $hote
// Retourne un array :
// last_conn["username"] : login windows
// last_conn["debut"] : timestamp du début de la dernière connexion
// last_conn["fin"] : timestamp de la fin de la dernière connexion ( = debut, si connexion non encore terminée)
// last_conn["close"] : 0 | 1 booléen indiquant si la connexion est terminée (1=close)
function Derniere_connexion_machine($hote) {
$last_conn = array();
$db = db_connect();
$req = 'SELECT username, debut_con, fin_con, close FROM `connexions` WHERE hote="'.$hote.'" order by con_id desc limit 1';
$res = db_query($db, $req);
while ($con = db_fetch_row($res)) {
$last_conn["username"] = $con[0];
$last_conn["debut"] = $con[1];
$last_conn["fin"] = $con[2];
$last_conn["close"] = $con[3];
}
db_free($res);
return $last_conn;
}
// Fonction Connexion_doyenne_salle
// Renvoie la plus plus ancienne connexion d'une salle :
// renvoie un entier correspondant au nombre de jours depuis la dernière connexion la plus ancienne dans la salle
function Connexion_doyenne_salle($machines_de_la_salle) {
$date_now = time();
$date_last = $date_now;
foreach($machines_de_la_salle as $machine) {
$last_conn = Derniere_connexion_machine($machine);
if (!empty($last_conn)) {
$debut_last_machine = $last_conn["debut"];
$date_last_machine = strtotime($debut_last_machine);
if ($date_last_machine < $date_last) { $date_last = $date_last_machine; }
}
}
$nb_jours = floor(($date_now-$date_last)/86400);
return $nb_jours;
}
// Fonction Salles()
// Renvoie un tableau de la liste des salles
function Salles() {
$salles = array();
$db = db_connect();
$req = 'select salle_id from salles';
$res = db_query($db, $req);
$i = 0;
while ($sal = db_fetch_row($res)) {
$salles[$i] = $sal[0];
$i++;
}
return $salles;
}
// Fonction Connexions_wifi()
// Renvoie les connexions wifi non marquées "close" en base
// Retourne un array indexé de connexions :
// con_wifi[i]["id"] : id de connexion wifi
// con_wifi[i]["username"] : login CAS
// con_wifi[i]["ip"] : ip allouée
// con_wifi[i]["browser"] : user agent
// con_wifi[i]["debut"] : timestamp du début de la connexion
function Connexions_wifi() {
$connexions_wifi = array();
$db = db_connect();
$req = 'select wifi_id, wifi_username, wifi_ip, wifi_browser, unix_timestamp(wifi_deb_conn) from wifi where close=0 and (to_days(now())-to_days(wifi_deb_conn)<1) order by wifi_deb_conn';
$res = db_query($db, $req);
$i = 0;
while ($con = db_fetch_row($res)) {
$connexions_wifi[$i]["id"] = $con[0];
$connexions_wifi[$i]["username"] = $con[1];
$connexions_wifi[$i]["ip"] = $con[2];
$connexions_wifi[$i]["browser"] = $con[3];
$connexions_wifi[$i]["debut"] = $con[4];
$i++;
}
db_free($res);
return $connexions_wifi;
}
// function connexions_blacklist_live()
// Renvoie les enregistrements de la table proxy de moins de 15 secondes : dernières touches sur la blacklist
// Retourne un array indexés : (ip, username, thème_blacklist) :
// $connexion_bl_live[$i]["ip"] : ip de la machine à l'origine de la requête sur une URL blacklistée
// $connexion_bl_live[$i]["username"] : username CAS à l'origine de la requête sur une URL blacklistée
// $connexion_bl_live[$i]["target"] : thème de la blacklist concerné - adult, warez, games, etc
function Connexions_blacklist_live() {
$connexions_bl_live = array();
$db = db_connect();
$req = 'select ip, username, target from proxy where timestampdiff(SECOND, timestamp(logts), timestamp(now())) < 15'; // on récupère les logs non checkés datant moins de 15s
$res = db_query($db, $req);
$i = 0;
while ($log = db_fetch_row($res)) {
$connexions_bl_live[$i]["ip"] = $log[0];
$connexions_bl_live[$i]["username"] = $log[1];
$connexions_bl_live[$i]["target"] = $log[2];
$i++;
}
db_free($res);
return $connexions_bl_live;
}
?>