summaryrefslogtreecommitdiffstats
path: root/server/bin
diff options
context:
space:
mode:
authorramon <ramongomez@us.es>2014-07-07 11:15:59 +0000
committerramon <ramongomez@us.es>2014-07-07 11:15:59 +0000
commite53b14b1bf5daaa0bb00a82833e7b6544e75dc1f (patch)
treeff5810cf2c28741e45305c394f058c17d3d04bb9 /server/bin
parent346eaee57b1acab2b42cf865567ab555c3066db3 (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-xserver/bin/comparemac57
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
+