diff options
author | ramon <ramongomez@us.es> | 2014-07-07 11:15:59 +0000 |
---|---|---|
committer | ramon <ramongomez@us.es> | 2014-07-07 11:15:59 +0000 |
commit | e53b14b1bf5daaa0bb00a82833e7b6544e75dc1f (patch) | |
tree | ff5810cf2c28741e45305c394f058c17d3d04bb9 /server/bin | |
parent | 346eaee57b1acab2b42cf865567ab555c3066db3 (diff) |
#648: Nuevo script {{{comparemac}}} que compara los datos de conexión actuales con los datos almacenados en la BD de OpenGnSys.
git-svn-id: https://opengnsys.es/svn/branches/version1.0@4322 a21b9725-9963-47de-94b9-378ad31fedc9
Diffstat (limited to 'server/bin')
-rwxr-xr-x | server/bin/comparemac | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/server/bin/comparemac b/server/bin/comparemac new file mode 100755 index 00000000..7c3b1145 --- /dev/null +++ b/server/bin/comparemac @@ -0,0 +1,57 @@ +#!/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 + |