#!/bin/bash # comparemac - script para comparar las direcciones MAC (ethernet) de los clientes # conectados a la red con las registradas en OpenGnsys. # Requisitos: arp-scan # Autores: Manuel González, Ramón M. Gómez - Univ. Sevilla, Junio 2014. # Variables. PROG=$(basename $0) OPENGNSYS=${OPENGNSYS:-"/opt/opengnsys"} SERVERCONF=$OPENGNSYS/etc/ogAdmServer.cfg # Ficheros temporales. MYCNF=$(mktemp /tmp/.my.cnf.XXXXX) TMPSQL=$(mktemp /tmp/mysql.cnf.XXXXX) TMPSCAN=$(mktemp /tmp/scan.cnf.XXXXX) # Control de errores. if [ ! -r $SERVERCONF ]; then echo "$PROG: Sin acceso a fichero de configuración." exit 2 fi if ! which arp-scan &>/dev/null; then echo "$PROG: Debe instalarse el programa \"arp-scan\"." exit 2 fi # Obtener datos de acceso a la base de datos. source $SERVERCONF # Componer fichero con credenciales de conexión. cat << EOT > $MYCNF [client] user=$USUARIO password=$PASSWORD EOT # Borrar ficheros temporales si termina el proceso. trap "rm -f $MYCNF $TMPSQL $TMPSCAN" 0 1 2 3 6 9 15 # Obtener datos de ordenadores registrados. mysql --defaults-extra-file=$MYCNF -D "$CATALOG" -s -N -e \ "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