martes, 10 de noviembre de 2009

Seguimiento de IPs para obtener su MAC

Hasta ahora hemos visto la forma de obtener la MAC de una IP, pero claro, la IP tiene que estar en uso para poder conocer su MAC. ¿Cómo podríamos hacer para conocer la MAC de varias IPs que aunque no están en uso actualmente sí lo pueden estar en las próximas horas o días?

Se hará lo siguiente: tendremos una lista de IPs a chequear (de las cuales no conocemos sus direcciones MAC). Cada cierto tiempo (pongamos cada hora) se chequearán todas las IPs y las que respondan a ping (y por tanto obtengamos su MAC) las iremos anotando en otra lista.

La lista de IPs a chequear la tendremos en el fichero ips:

192.168.1.2
192.168.1.5
192.168.1.100
192.168.1.200
192.168.1.240

Realizaremos el script que chequeará cada vez que sea llamado:

#!/bin/sh

IFS="
"

for IP in $(cat ips)
do
  MAC=`ping -c 1 $IP >/dev/null 2>&1 && arp -n | grep "$IP " | awk '{print $3}'`
  if [ $? -eq "0" ]; then
    echo $IP $MAC >> macs
  else
    echo $IP >> tmp
  fi
done

mv tmp ips

Y por último, configuraremos cron para que llame al script cada hora:

$ crontab -e
0 * * * * sh /home/juan/chequear.sh

Indicar que, según muestra el script, en el fichero ips nos irán quedando las IPs que no han respondido a ping y en el fichero macs las IPs junto a sus MAC.

2 comentarios:

  1. Hola muy útil el programa. ¿Crees que sería fácil usar una base de datos para almacenar los datos que estás buscando en vez de usar ficheros de texto?

    Un saludo

    ResponderEliminar
  2. Hola, sería muy fácil. Al menos si usas Postgresql (es la BD con la que suelo hacer cosillas a menudo), pues el intérprete de comandos que tiene en modo consola (psql) se puede llamar mediante scripts y pasarle las sentencias SQL que quieres que ejecute (insert, delete, ...). Preparo algunos ejemplos para el post de mañana ;)

    Saludos y gracias por pasarte por aquí.

    ResponderEliminar