En este proyecto, vamos a crear una herramienta de monitoreo de red utilizando Bash. Esta herramienta permitirá a los usuarios monitorear el estado de los dispositivos en una red, verificar la conectividad y generar informes sobre el rendimiento de la red.

Objetivos del Proyecto

  1. Monitorear la conectividad de dispositivos en la red.
  2. Generar informes sobre el estado de la red.
  3. Automatizar el proceso de monitoreo y generación de informes.

Requisitos Previos

Antes de comenzar, asegúrate de tener conocimientos básicos sobre:

  • Comandos de red en Bash (como ping, traceroute, netstat).
  • Redirección y tuberías en Bash.
  • Manipulación de archivos y cadenas en Bash.

Paso 1: Configuración del Entorno

Primero, asegúrate de tener acceso a los comandos necesarios para el monitoreo de red. Puedes verificar esto ejecutando los siguientes comandos en tu terminal:

ping -V
traceroute -V
netstat -V

Si alguno de estos comandos no está disponible, instálalos utilizando el gestor de paquetes de tu sistema (por ejemplo, apt-get en Debian/Ubuntu o yum en CentOS).

Paso 2: Creación del Script de Monitoreo

Vamos a crear un script llamado network_monitor.sh. Este script realizará las siguientes tareas:

  1. Ping a una lista de dispositivos.
  2. Registro de los resultados en un archivo de log.
  3. Generación de un informe de estado.

Estructura del Script

#!/bin/bash

# Lista de dispositivos a monitorear
DEVICES=("192.168.1.1" "192.168.1.2" "192.168.1.3")

# Archivo de log
LOG_FILE="network_monitor.log"

# Función para realizar ping y registrar el resultado
function ping_device {
    local device=$1
    local result=$(ping -c 1 $device | grep '1 received')
    if [ -n "$result" ]; then
        echo "$(date): $device is UP" >> $LOG_FILE
    else
        echo "$(date): $device is DOWN" >> $LOG_FILE
    fi
}

# Limpiar el archivo de log anterior
> $LOG_FILE

# Monitorear cada dispositivo
for device in "${DEVICES[@]}"; do
    ping_device $device
done

# Generar informe de estado
echo "Network Monitoring Report" > report.txt
echo "=========================" >> report.txt
cat $LOG_FILE >> report.txt

Explicación del Script

  1. Lista de Dispositivos: Definimos una lista de direcciones IP de los dispositivos que queremos monitorear.
  2. Archivo de Log: Especificamos el archivo donde se registrarán los resultados del monitoreo.
  3. Función ping_device: Esta función realiza un ping a un dispositivo y registra el resultado en el archivo de log.
  4. Limpieza del Archivo de Log: Antes de comenzar el monitoreo, limpiamos el archivo de log anterior.
  5. Monitoreo de Dispositivos: Iteramos sobre la lista de dispositivos y llamamos a la función ping_device para cada uno.
  6. Generación del Informe: Creamos un informe de estado basado en el contenido del archivo de log.

Paso 3: Automatización del Monitoreo

Para automatizar el monitoreo, podemos utilizar cron para ejecutar el script a intervalos regulares.

Configuración de Cron

  1. Abre el archivo de configuración de cron:
    crontab -e
    
  2. Añade la siguiente línea para ejecutar el script cada 5 minutos:
    */5 * * * * /ruta/a/tu/script/network_monitor.sh
    

Paso 4: Ejecución y Verificación

  1. Ejecuta el Script Manualmente:
    ./network_monitor.sh
    
  2. Verifica el Archivo de Log:
    cat network_monitor.log
    
  3. Verifica el Informe Generado:
    cat report.txt
    

Ejercicio Práctico

  1. Añadir más Dispositivos: Modifica el script para incluir más dispositivos en la lista.
  2. Mejorar el Informe: Añade más detalles al informe, como el tiempo de respuesta del ping.
  3. Notificaciones: Configura el script para enviar notificaciones por correo electrónico si algún dispositivo está caído.

Solución del Ejercicio

  1. Añadir más Dispositivos:
    DEVICES=("192.168.1.1" "192.168.1.2" "192.168.1.3" "192.168.1.4" "192.168.1.5")
    
  2. Mejorar el Informe:
    function ping_device {
        local device=$1
        local result=$(ping -c 1 $device)
        local time=$(echo "$result" | grep 'time=' | awk -F'time=' '{print $2}')
        if [ -n "$time" ]; then
            echo "$(date): $device is UP, Response Time: $time" >> $LOG_FILE
        else
            echo "$(date): $device is DOWN" >> $LOG_FILE
        fi
    }
    
  3. Notificaciones:
    function ping_device {
        local device=$1
        local result=$(ping -c 1 $device)
        local time=$(echo "$result" | grep 'time=' | awk -F'time=' '{print $2}')
        if [ -n "$time" ]; then
            echo "$(date): $device is UP, Response Time: $time" >> $LOG_FILE
        else
            echo "$(date): $device is DOWN" >> $LOG_FILE
            echo "Subject: Device $device is DOWN" | sendmail [email protected]
        fi
    }
    

Conclusión

En este proyecto, hemos creado una herramienta básica de monitoreo de red utilizando Bash. Hemos aprendido a realizar pings a dispositivos, registrar los resultados y generar informes. Además, hemos automatizado el proceso utilizando cron. Este proyecto puede ser ampliado y mejorado para adaptarse a necesidades más complejas de monitoreo de red.

© Copyright 2024. Todos los derechos reservados