Este sencillo script nos ayudará a obtener la MAC de la IP indicada como parámetro:
#!/bin/sh
ping -c 1 $1 >/dev/null 2>&1 && arp -n | grep $1 | awk '{print $3}'
ping -c 1 $1 >/dev/null 2>&1 && arp -n | grep $1 | awk '{print $3}'
Su llamada sería:
$ ./obtener_mac 192.168.1.1
00:13:f7:e9:96:cf
Si quisiéramos realizar un listado completo de IPS-MACS de nuestra red, podríamos adaptar el script de esta forma:
#!/bin/sh
for IP in $(seq 254)
do
MAC=$(ping -c 1 $1$IP >/dev/null 2>&1 && arp -n | grep "$1$IP " | awk '{print $3}')
echo $1$IP - $MAC
done
for IP in $(seq 254)
do
MAC=$(ping -c 1 $1$IP >/dev/null 2>&1 && arp -n | grep "$1$IP " | awk '{print $3}')
echo $1$IP - $MAC
done
Suponiendo una red de clase C y pasando como parámetro la parte fija de la dirección IP:
$ ./listado_macs 192.168.2.
192.168.2.1 - 00:13:f7:e9:96:cf192.168.2.2 -
192.168.2.3 -
[.......]
Muy bueno el programa.
ResponderEliminarSólo vale para equipos que estén encendidos y tengan conectividad.
Un saludo.
Hola, gracias por pasarte por el blog.
ResponderEliminarEfectivamente, sirve solo para equipos encendidos. No obstante, se podría hacer un script que en base al listado generado, chequee las IPs para las que no se conoce MAC y realice el ping, arp, etc. Si se encuentra una MAC, con "sed" se podría cambiar la linea del listado correspondiente a esa IP, y actualizar la MAC.
Saludos
He corregido un bug que hacía que grep validase las lineas que contienen 192.168.1.1, 192.168.1.11, etc, cuando se llamaba a grep 192.168.1.1.
ResponderEliminarLa linea corregida era:
MAC=$(ping -c 1 $1$IP >/dev/null 2>&1 && arp -n | grep $1$IP | awk '{print $3}')
Y su corrección:
MAC=$(ping -c 1 $1$IP >/dev/null 2>&1 && arp -n | grep "$1$IP " | awk '{print $3}')