En este tutorial, generaremos un script en bash para mostrar la ip de cada extensión en Asterisk, más la dirección Mac Address si fuera posible, si hay multiples redes los routers no permiten tomarla.
Para escanear las MAC ADRESS en otras redes:
sudo apt install arp-scan -y # Para Debian/Ubuntu
sudo yum install arp-scan -y # Para CentOS/RHEL
Creamos el script Listaextensiones.sh
#!/bin/bash
output_file="extensiones.txt"
# Encabezado
echo -e "Extensión\tCallerID\tEstado\tIP\tMAC Address" > "$output_file"
echo "------------------------------------------"
# Obtener la lista de extensiones PJSIP
extensions=$(asterisk -rx "pjsip show endpoints" | grep "Endpoint:" | awk '{print $2}' | cut -d'/' -f1)
for ext in $extensions; do
echo "🔍 Procesando extensión: $ext"
# Obtener la información completa del endpoint
endpoint_info=$(asterisk -rx "pjsip show endpoint $ext")
# Extraer CallerID correctamente
callerid=$(echo "$endpoint_info" | grep -i "callerid" | awk -F '"' '{print $2}')
# Si CallerID está vacío, marcarlo como "Desconocido"
if [[ -z "$callerid" ]]; then
callerid="Desconocido"
fi
# Extraer la IP desde Contact:
ip=$(echo "$endpoint_info" | grep -i "Contact:" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+')
# Verificar si la extensión está registrada
if echo "$endpoint_info" | grep -q "Avail"; then
status="REGISTRADA"
else
status="NO REGISTRADA"
ip="N/A"
fi
# Obtener MAC Address con `arp-scan` si la IP está en otra red
if [[ "$ip" != "N/A" ]]; then
# Hacer ping para actualizar la tabla ARP
ping -c 1 -W 1 "$ip" > /dev/null 2>&1
# Intentar obtener la MAC address después del ping
mac=$(arp -n | awk -v ip="$ip" '$1 == ip {print $3}')
# Si la MAC sigue sin aparecer, usar `arp-scan`
if [[ -z "$mac" ]]; then
mac=$(sudo arp-scan --interface=eth0 "$ip" | grep "$ip" | awk '{print $2}')
fi
# Si no se encuentra MAC, marcar como "N/A"
if [[ -z "$mac" ]]; then
mac="N/A"
fi
else
mac="N/A"
fi
# Guardar en el archivo con tabulaciones
echo -e "$ext\t$callerid\t$status\t$ip\t$mac" >> "$output_file"
# Mostrar en pantalla también
echo -e "$ext\t$callerid\t$status\t$ip\t$mac"
echo "------------------------------------------"
done
echo "Resultados guardados en: $output_file"
NOTAS EXPLICATIVAS:
Si las MAC addresses no se muestran incluso con arp-scan, entonces es muy probable que la red no permita la resolución de MAC en otras subredes. Esto es normal en redes con ruteo porque las MAC addresses solo se pueden ver en la misma subred (LAN).
🔍 ¿Por qué no se pueden ver las MAC en otras redes?
1. Los switches y routers no reenvían paquetes ARP entre subredes.
2. ARP solo funciona en la capa 2 (Enlace de Datos) y no cruza routers.
3. Si una IP está en otra red, Asterisk solo ve la MAC del router/gateway, no la del dispositivo real.
This Post Has 0 Comments