Este script nos va a servir para que nuestro ordenador o router con OpenWrt o Lede nos diga cuantos dispositivos hay conectados a nuestra red.
Termina el día, los alumnos se van y uno se queda un rato más verificando que no quede ningún ordenador encendido. Con este script conseguiremos saber si ha quedado alguno funcionando.
Permite excluir las direcciones MAC de los dispositivos que normalmente deben quedarse encendidos: Router pricipal, Servidores, Switches, Impresoras de Red …
Además podemos quitar del recuento las MACS de máquinas virtuales ya que estas aparecen como si fueran un ordenador más.
He comentado el script lo mejor que he podido. Espero que se entienda.
Necesitamos tener instalada la aplicación arp-scan.
En Ubuntu y derivados:
sudo apt update sudo apt install arp-scan
Parar ejecutar el script en Ubuntu y derivados debe hacerse con permisos de superusuario (sudo) ya que arp-scan necesita privilegios. Además en el script cambiaremos donde dice:
#!/bin/sh
por#!/bin/bash
- En la línea de
arp-scan -x
quitamos el-x
quedando como:QUERY=$(arp-scan $RANGE -I $INTERFACE -N -g -q)
- En la última línea quitamos
echo "$QUERY" | wc -l
sustituyéndolo porlineas=$(echo "$QUERY" | wc -l) ; echo $(($lineas - 5))
La razón de estos cambios es que en la versión del repositorio actual de Linux Mint, arp-scan no tiene la opción -x para eliminar cabeceras y pies del informe de equipos conectados. Estas línas son 5 en total. Es por ello que al resultado del script hay que restarle 5.
En openwrt (LEDE):
opkg update opkg install arp-scan
En un router con Openwrt (LEDE) se puede configurar para que lo diga a viva voz añadiéndole una tarjeta de sonido USB cuando se pulsa un botón. Para hacerlo puedes combinarlo con este post anterior http://openwrt.tuinstituto.es/router-que-dice-una-frase-aleatoria-con-lede
#!/bin/sh ##################################################### # Descripción: # Este script nos devuelve el número de dispositivos # conectados a nuestra red. # Podemos excluir en la configuración las MACS que queramos # incluyendo prefijos de Macs. # Originalmente está realizado para OpenWRT (LEDE) ###################################################### ######### Configuración ############################# # Añadimos las MACS que queremos que no cuenten en el resultado final # Por ejemplo un router,impresora de Red o un servidor. EXCLUDED_MACS="XX:XX:XX:XX:XX:XX, YY:YY:YY:YY:YY:YY" # También podemos quitar las Macs que comiencen por un valor. # Con esto podemos excluir las macs de Máquinas Virtuales # o las Macs de un fabricante. EXCLUDED_MACS_PREFIX="AA:BB:CC, DD:EE" # Interfaz de red por el que buscará los equipos. INTERFACE="br-lan" # Rango de direcciones IP que queramos buscar. # Nótese que podemos jugar con la máscara # Con 192.168.0.0/16 buscará los equipos que comienzan # por 192.168 aunque tardará mucho más en decirnos el resultado. RANGE="192.168.1.0/24" ########## Fin de Configuración ##################### # Quitamos las comas de las MACS Excluidas y las sustituimos # por retorno de carro para que queden una debajo de otra # y poder manipularlas mejor. MACS=$(echo $EXCLUDED_MACS | tr "," "\n") # Quitamos los espacios por si alguien mete espacios entre las MACS. # Lo hacemos de otra manera para entenderlo mejor consultar: # http://tldp.org/LDP/abs/html/string-manipulation.html MACS=$(echo ${MACS//[[:blank:]]/}) # Hacemos lo mismo con los prefijos excluidos. MAC_PREFIXES=$(echo $EXCLUDED_MACS_PREFIX | tr "," "\n") MAC_PREFIXES=$(echo ${MACS//[[:blank:]]/}) # Realizamos el escaneo y lo guardamos en la variable QUERY # -N = IP solo quiero IPs y no nombres de equipos. # -x = No queremos la cabecera y el pie que se suele añadir al resultado. # -g = No visualices los paquetes duplicados. # -q = No busques en los archivos OUI.txt ... el fabricante. QUERY=$(arp-scan -x $RANGE -I $INTERFACE -N -g -q) # Ahora quitamos las líneas donde aparecen las macs for mac in $MACS do # Hacemos un grep inverso (-v) y que no distinga entre mayúsculas # y minúsculas (-i). # Cada iteración del bucle irá quitando la línea donde aparece cada una # de las macs y almacena el resultado otra vez en la variable QUERY. QUERY=$(echo "$QUERY" | grep -v -i "$mac") done # Ahora quitamos las líneas donde aparecen las macs for mac in $MAC_PREFIXES do # Hacemos un grep inverso (-v) y que no distinga entre mayúsculas # y minúsculas (-i). # Cada iteración del bucle irá quitando la línea donde aparece cada una # de las macs y almacena el resultado otra vez en la variable QUERY. # Nótese que esta vez busca con un tabulador (\t) antes de la MAC ya que # el resultado de arp-scan separa por tabuladores y no por espacios. QUERY=$(echo "$QUERY" | grep -v -i "\t$mac") done # Visualizamos el recuento final que no es más que # el número de líneas que contiene la variable QUERY. echo "$QUERY" | wc -l
Recuerda que al final debes darle permisos de ejecución con:
chmod +x nombre_script
O bien
sudo arp-scan 192.168.1.0/24 | grep 192 | wc -l
Cierto. Con lo fácil que es hacerlo en una línea. 😉