Raspberry Pi

Buscador de Raspberry Pi. rootless

motivación

Ya le hemos planchado una imagen a nuestra Raspberry Pi, y ahora, ¿como nos conectamos a ella? ¿qué IP tiene? … En caso de que esté conectada a un monitor pues nada más sencillo que comprobarlo, pero:

  • si no disponemos de monitor.
  • si trasteamos mucho con ella/s.
  • si directamente no te apetece conectarla por HDMI.

Además, no siempre vamos a ser root, y el escenario planteado es rootless.

cómo lo hacemos

Para encontrar a la/s Raspberry Pi he creado un script en Bash que busca en la red de un equipo que Raspberrys Pi se encuentran en su mismo segmento.

# !/bin/bash
#
# Busca las Raspberry Pi que estén conectadas dentro de la VLAN.
# Primero realiza un ping a cada una de las IPs de la VLAN para asegurar que 
# el interfaz conectado aparezca en la tabla ARP.
# Una vez que aparece en la tabla ARP se puede filtrar para buscar las MAC
# asociadas al fabricante.
#
# Una ventaja del script es que es rootless, de manera que no necesita de root
# para funcionar correctamente.


# LAN que contiene la/s IP/s. Script preparado para Clase C.
VLAN=192.168.0
# Fuente para PI_MACs -> https://udger.com/resources/mac-address-vendor-detail?name=raspberry_pi_foundation.
PI_MACs=" -e B8:27:EB -e DC:A6:32 -e E4:5F:01"


# Ping a toda la VLAN. Realizado con la función time para que sea lo más rápido posible.
echo -e "\nRealizando ping a toda la vlan"
PING_VLAN=$(time ( s=$VLAN ; for i in $(seq 1 254) ; do ( ping -n -c 1 -w 1 $s.$i ) & done ; wait ) > /dev/null 2>&1)


# Se provoca un retardo para que la búsqueda anterior finalice.
echo -e "\nEsperamos a que finalicen los pings para que aparezcan en la tabla arp"
sleep 10

# Búsqueda de las mac dentro de la tabla arp.
echo -e "\nBuscando las mac del fabricante Raspbery"
BUSCA_PIs=$(arp -a | cut -f 2,4 -d " " | tr [:lower:] [:upper:] | grep $PI_MACs)


# Print del resultado de la búsqueda.
if [ "xxx$BUSCA_PIs" = "xxx" ]; then
	echo -e "\nNo he encontrado ninguna Raspberry Pi"
else
  	echo -e "\nEncontrada/s $(wc -l <<< $BUSCA_PIs) Raspberry Pi"
	while IFS= read -r line; do 
		echo "$line"
	done <<< "$BUSCA_PIs"
fi