blob: 6b1c6eff08ccb49bdeec8c45fba232bf58462e94 (
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
|
#!/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.cfg
# 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 $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
|