skip to Main Content

Generar listado de extensiones con IP y Mac

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.

Latest Articles
April 23, 2025

Generar listado de extensiones con IP y Mac

En este tutorial, generaremos un script en bash para mostrar la ip de cada extensión en Asterisk, más la dirección…

Subscribe To Our Newsletter

Don't get left out of the loop, make sure you subscribe to our newsletter below so you can be notified of our latest insights, tips, tutorials, sales and more!

Discussion

This Post Has 0 Comments

Leave a Reply

Your email address will not be published. Required fields are marked *

Back To Top