Publi

Saber si estamos conectados a internet [bash]

cat_linuxA menudo lanzo scripts que necesitan saber si la conexión a Internet está disponible para lanzarse, en caso de que no lo esté, invertirán mucho tiempo en terminar o terminarán con muchos errores. La forma más fácil de saber cuándo estamos conectados es intentar acceder a un ordenador que sepamos seguro que está conectado… por ejemplo google.com, que para eso está.

Podemos por ejemplo hacer ping al servidor, pero un ping es muy visual, necesitaremos hacer algo más para aprovechar la salida de ese ping; aunque también podemos intentar conectar por el puerto 80 (http).

Dejo varios métodos para poder hacerlo de forma sencilla desde la línea de comandos:

ping

$ if ping -c1 google.com &>/dev/null; then echo «Tienes conexion»; else echo «no tienes conexion»; fi

Con esta línea haremos un ping a google, sólo mandaremos un paquete (-c1) y mandaremos la salida de ping a /dev/null (no nos interesa lo que nos diga, queremos hacer un script amigable al usuario, sin mensajes raros), si ping no da errores, se ha hecho bien, mostramos el mensaje de tienes conexion, si no, el de no tienes conexión.

Aunque en los siguientes scripts haremos una salida de texto, siempre podremos hacer un exit y terminar el script cuando no haya conexión.

netcat

if netcat -z google.com 80; then echo «Tienes conexion»; else echo «no tienes conexion»; fi

Igual que antes pero probamos la conexión al puerto 80, netcat utiliza el parámetro -z para ver sólo si se puede conectar, una vez se conecta, se cierra la conexión.

escribiendo en el servidor directamente

Tenemos dos métodos más…

if echo «»>/dev/tcp/totaki.com/80; then echo «Tengo conexion»; else echo «no tengo»; fi

Aquí conectamos con el servidor a través de /dev/tcp (necesitamos tener permisos), al servidor le enviamos una cadena vacía.

También podemos hacer:

if exec 3>/dev/tcp/totaki.com/80; then echo «Tengo conexion»; else echo «no tengo»; fi

Utilidades y notas

Podemos utilizarlo por ejemplo en cron scripts que requieran conexión a internet (subir una copia de seguridad a un servidor externo, enviar nuestra ip de Internet a un servidor), o por ejemplo para saber la disponibilidad de un servidor, es decir, si tenemos alquilado un servidor a lo mejor nos interesa monitorizarlo para saber si está caído, en fin los usos son los que nos de la imaginación.

Antes dije que podríamos incluir un exit cuando el script no tenga conexión, pero también podremos llamar a otro script en el caso de tener conexión, o hacer lo siguiente (con el ejemplo de ping):

1
2
3
4
5
6
7
8
#!/bin/bash
if ping -c1 google.com &>/dev/null;
then
        echo "Ejecutando script";
        $@
else
        echo "no tienes conexion";
fi

Llamamos al fichero internet, damos permisos de ejecución y podremos llamar a cualquier script de la siguiente forma:

$ internet wget http://www.poesiabinaria.net

(por ejemplo), el script sólo se ejecutará si estamos conectados a Intenet

Mejoras

Bueno, puede pasar, que alguna vez google.com esté caído, podemos intentar pasar por dos o tres servidores, si vemos que uno de ellos responde (siempre que no sea de una red local) sabremos que estamos conectados.

Foto: fotohiro (Flickr)

También podría interesarte....

There are 15 comments left Ir a comentario

  1. Pingback: Bitacoras.com /

  2. Mauro /
    Usando Google Chrome Google Chrome 44.0.2403.130 en Windows Windows NT

    Tienes malo el ejemplo del ping cuando detecta conexion unrechable

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 41.0 en Ubuntu Linux Ubuntu Linux

      Hola Mauro,
      ¿Podrías indicarme dónde está el problema? Acabo de copiar la línea tal cual y me funciona incluso cuando desconecto el cable de red. Ten en cuenta que no funcionaría en Microsoft Windows.
      Gracias

  3. carliños /
    Usando Mozilla Firefox Mozilla Firefox 45.0 en Linux Linux

    gran post! Aprendí a usar if sin «[ ]». Muchas Gracias.

  4. AnonymousWebHacker /
    Usando Mozilla Firefox Mozilla Firefox 62.0 en Windows Windows 8

    EN CASO DE PING Y QUEDE [conexion unrechable], QUE NO SON LAS VARIANTES DE QUE SI HAGA O NO PING, ESTA EXEPCION COMO PODRIAMOS MANEJARLA?, O SEA, EL SCRIPT ME NOTIFICA SI HAY , O NO CONEXION, PERO EN CASO DE QUE ME DE conexion unrechable, NO ME NOTIFICA NADA, QUE PEUDO HACER PARA QUE ME NOTIFQUE ESO TMABIEN
    SALUDOS

Leave a Reply to Mauro Cancle Reply