====== 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_enlace_activo|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