blob: 0596c323168e8eece1f2091b59f45cc935e1e0eb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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
|