Noticia Script Bash: Comparar MAC de todos los equipos de una red con una específica

Aquí les hablaré de un script en bash que hice para una finalidad muy específica, que dudo que otros tengan esta situación pero, ya que lo programé… no me cuesta nada compartirlo :)

Arriba, ¿de qué va esto?


Sucede que en mi ciudad hay una red bastante grande, muchos nos conectamos de forma cableada (un cable de red a un switch, enlazado a otro, ya sí muchos switches jeje), pero los enlaces grandes (que no pueden ser por cable) se hacen con equipos wifi, de esta forma se tiene una red con varios miles de usuarios, que si bien no hay servicio de correo ni muchísimo menos internet, sí se juega WoW (entre otros), se aprende, comparte información, etc.

El caso es que se ha dado el caso de que se banea o expulsa de la red a determinado equipo wifi, bien porque su dueño incumple normas de la red, o por lo que sea. Entonces, se hace necesario hacer un scan cada X tiempo para revisar si la MAC del equipo expulsado alguien lo ha vuelto a conectar, y aquí es donde entra este script.

De forma simple, ¿qué hace el script?

  1. Primero hace un scan en la subred donde se ejecute y detecta los hosts vivos (las IPs activas)
  2. Luego, revisa si alguna de esas IPs es un Ubiquiti (equipos que se usan para los enlaces). En realidad solo detecta si el puerto 443 está abierto en cada una de las IPs anteriores.
  3. Saca la MAC de cada equipo vivo y con el puerto 443 abierto, mientras que al mismo tiempo va comparando cada MAC extraída con la que se busca.
  4. En caso de que encuentre una coincidencia, genera un reporte.
Venga, al code!


Válido aclarar que para su funcionamiento necesita los siguientes paquetes instalados: nmap … nc … arping

Pues con nmap hace el mapeo para detectar IPs activas, con nc luego comprueba cuál tiene el puerto 443 abierto, y finalmente con arping extrae la MAC.

Sí, sé que con nmap se puede hacer todo esto, pero demoraba varios segundos (o minutos más), preferí usar varias herramientas en vez de solo una para que funcione todo más rápido.

Ahora sí…. el code!



#!/bin/bash
#
# Requiere tener instalados los paquetes:
# nmap , arping , nc
#
# Author: KZKG^Gaara

clear

# Declarando variables
DATE=`date +'%Y-%m-%d_%H-%M'`
INTERFAZ='wlo1'
WANTEDMAC='C8:CB:B8:B1:DA:E6'
YOURIP=`ifconfig | grep "192.168" | awk '{print $2}'`
YOURZONE=`echo $YOURIP | awk -F "." '{print $3}'`

# Sacando los Hosts Alive en la red (su IP)
nmap -sn 192.168.$YOURZONE.0/24 | grep "report for" | awk '{print $5}' > hosts-ip

# Viendo cuales de esos Hosts pueden ser un Nano al tener el puerto 443 abierto
rm hosts-nanos &> /dev/null
for TMPVAR in `cat hosts-ip`
do
nc -zv -w 2 $TMPVAR 443 &> /dev/null
if [ $? -ne 1 ]; then
echo "$TMPVAR" >> hosts-nanos
fi
done

# Sacando MAC de Nanos en la red
rm hosts-mac &> /dev/null
for TMPVAR in `cat hosts-nanos`
do
arping -I $INTERFAZ -f $TMPVAR | grep "reply from" | awk '{print $5}' | cut -d'[' -f2 | cut -d']' -f1 >> hosts-mac
done

# Comparando MACs extraidas con la buscada
for MAC in `cat hosts-mac`
do
if [ "$MAC" = "$WANTEDMAC" ]; then
MACLINE=`cat hosts-mac | grep -n $MAC | cut -d':' -f1`
IPMAC=`cat hosts-nanos | sed $MACLINE'q;d'`
echo -e "\n\t ALERTA, MAC de equipo robado detectada: $MAC ... Con IP: $IPMAC"
echo -e "\t ... Generando Reporte ..."
echo -e "Reporte generado por SpyMac\n" > final_report_$YOURZONE.info
echo -e "Momento del reporte: $DATE\n" >> final_report_$YOURZONE.info
echo -e "MAC de equipo robado detectada: $WANTEDMAC\n" >> final_report_$YOURZONE.info
echo -e "IP que usa actualmente ese equipo: $IPMAC\n" >> final_report_$YOURZONE.info
echo -e "Reporte generado por: $YOURIP\n" >> final_report_$YOURZONE.info
fi
done

exit


En caso de que se encuentre una coincidencia, nos mostrará la MAC encontrada y además, la IP que usa ese equipo.

Esto (aún) tiene lagunas jeje




Sé que hay cosas que mejorar, por ejemplo las MACs se pueden falsear, se le puede cambiar la MAC al equipo y listo, aún estoy buscando cómo ver la MAC real y no la falsa si se da el caso.

También, agregando otro ciclo for puedo hacer que se comparen varias MACs al mismo tiempo y no comparar/buscar solo una en específico, o sea, que se busquen las MACs que estén en un listado, 5, 10, las que sean. Es algo que tengo por hacer aún.

A lo mejor es un Nano pero tiene el puerto 443 bloqueado, sé cómo poder con total seguridad saber si es un equipo Ubiquiti o no, o sea con curl (o wget) puedo sacar el formulario de login y compararlo con uno de un Ubiquiti, este es un método más seguro que con el puerto 443. Es otro detalle a agregar en futuras versiones.

También me gustaría (cosa que ya sí me resultará difícil) generar un pequeño script o inclusive un APK para tener esta herramienta en mi Android. Sé que no podré ponerla en el Play Store pero…. bueh, tampoco es que quiera :D

Ah, los usuarios de iPhone… ni aunque pueda (por conocimientos y tiempo) portaría esta herramienta a iOS … JUAZ JUAZ JUAZ … busquen en su App Store a ver si de casualidad tienen algo parecido, cosa que dudo :D

Fin


Bueno es todo. Repito, creo que el script en específico tal vez no les sea de utilidad a muchos (es para una situación bastante específica), pero tal vez partes del code sí, ojalá y sea así :D


EMuoLmfQZfg


Continúar leyendo...