#!/bin/bash #/** #@file comparemac #@brief Comparar las direcciones MAC (ethernet) de los clientes conectados a la red con las registradas en OpenGnsys. #@usage comparemac #@warning Usa el programa "arp-scan". #@version 1.0.6 - Versión inicial. #@author Manuel González, Ramón M. Gómez - Univ. Sevilla #@date 2014-07-11 #*/ ## # Variables. OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} SERVERCONF=$OPENGNSYS/etc/ogserver.json # Funciones globales. source $OPENGNSYS/lib/ogfunctions.sh || exit 1 # Control de errores. [ "$*" == "help" ] && help [ "$*" == "version" ] && version [ $# -gt 0 ] && raiseError usage [ "$USER" != "root" ] && raiseError access "Need to be root" [ -r $SERVERCFG ] || raiseError access "Server configuration file" which arp-scan &>/dev/null || raiseError notfound "Need to install \"arp-scan\"" # Obtener datos de acceso a la base de datos. source_json_config $SERVERCONF # Borrar ficheros temporales si termina el proceso. trap "rm -f $TMPSQL $TMPSCAN" 0 1 2 3 6 9 15 # Ficheros temporales. TMPSQL=$(mktemp /tmp/mysql.cnf.XXXXX) TMPSCAN=$(mktemp /tmp/scan.cnf.XXXXX) # Obtener datos de ordenadores registrados. dbexec "SELECT ip, mac, REPLACE (aulas.nombreaula, ' ', '_') AS aula FROM ordenadores JOIN aulas USING (idaula) ORDER BY ip" > $TMPSQL # Obtener datos de red. NET=$(ip -o addr show up | awk -v ip="^$ServidorAdm/" '{if ($3=="inet" && $4 ~ ip) print $4}') arp-scan $NET 2>/dev/null | awk '/^[0-2]*\./ {gsub(/:/,"");print $1,toupper($2)}' > $TMPSCAN # Comparar los ficheros y mostrar las diferencias de direcciones MAC. (while read -e IP MAC; do awk -v ip=$IP -v mac=$MAC '{if ($1 == ip && $2 != mac) printf("%s (%s) conectado con MAC %s, registrado con %s\n",ip,$3,mac,$2); }' $TMPSQL done) < $TMPSCAN