Tabla de Contenidos

Detectar si hay conectividad, mediante un script

Hay ocasiones en las que puede ser necesario hacer que un script se ejecute solo si una PC tiene conectividad. Después de detectar si el enlace está activo, una manera frecuente de comprobarlo es utilizando el comando ping.

Mediante el comando ping

Variante simple:

(ping -q -c 1 algun_equipo_accesible > /dev/null 2>&1) && comando_a_ejecutar

Variante extendida:

#! /bin/sh
ping -q -c 1 algun_equipo_accesible > /dev/null 2>&1
if [ $? -eq 0 ] ; then
  comando_a_ejecutar
else
  echo -e "Imposible encontrar el equipo.\nProbablemene no hay conectividad.\n"
fi

No obstante, en ocasiones no podemos utilizar el comando ping porque el protocolo ICMP ha sido deshabilitado en nuestra PC o nuestro cortafuegos.

Que hacer entonces? Afortunadamente, existen maneras alternativas de realizar la comprobación, he aquí algunos ejemplos:

Mediante el comando host

Una alternativa que podemos buscar al comando ping es realizando una consulta DNS, que podemos ejecutar con el comando host.

Variante simple:

(host -t a algun_equipo_accesible > /dev/null 2>&1) && comando_a_ejecutar

Variante extendida:

#! /bin/sh
host -t a algun_equipo_accesible > /dev/null 2>&1
if [ $? -eq 0 ] ; then
  comando_a_ejecutar
else
  echo -e "Imposible encontrar el equipo.\nProbablemene no hay conectividad.\n"
fi

La comprobación mediante una consulta DNS es muy rápida, pero si algún equipo de la ruta tiene habilitada una cache para acelerar las consultas DNS, este método podría no funcionar.

Mediante el comando wget

Esta otra variante utiliza el comando wget en un modo especial, que solo responde si el sitio es o no accesible. No es tan rápida como la consulta DNS, pero podría resultar más confiable.

Variante simple:

(wget -q --timeout=5 --spider www.algun_sitio_accesible.org) && comando_a_ejecutar

Variante extendida:

#! /bin/sh
wget -q --timeout=5 --spider www.algun_sitio_accesible.org
if [ $? -eq 0 ]; then
  comando_a_ejecutar
else
  echo -e "Imposible encontrar el sitio.\nProbablemene no hay conectividad.\n"
fi