Redes

Comprobar el estado de la conexion a Internet

Por razones que no vienen al caso, me toco trabajar un par de semanas desde un lugar geográficamente remoto y donde la calidad de la conexión a internet deja mucho que desear, sobre todo en los días de viento, la conexión se corta, sin exagerar cada 20 o 30 segundos, el roaming internacional funcionaba tan mal como el wifi y al ser extranjero no podía activar un plan movil prepago así que hasta solucionar eso, me toco encontrar una solución a la intermitencia de la conectividad.

Normalmente, vuelve rápido, sin embargo, algunas veces demora y si bien no a pasado aún, bien puede ser permanente y hasta que no necesite algo de internet, no enterarme del corte perdiendo las notificaciones importantes que debo atender, sobre todo en la noche estando de guardia, así que me toco crear un script para detectar las caídas y avisar, a continuación el código:

#!/bin/python3

import requests
import gi
gi.require_version('Notify', '0.7')

import time
from gi.repository import Notify
from playsound import playsound

import os

def notification(text,sound=False):
    #Notifiction
    Notify.init ("ALERTA")
    dialog=Notify.Notification.new ("ALERTA",text,"dialog-information")
    #dialog.set_timeout(0)
    dialog.show()

    #Sound
    if sound==True:
        playsound('./alarma.wav')

attempt=30
interval=5

count = 0

try:
    while(True):

        try:
            now = time.strftime("%Y-%m-%d %H:%M:%S")
            x = requests.get('https://check.server.com.uy/',timeout=5)

            if (x.text!="OK"):  
                count += 1
                print("{} Fallo intentando conectar con https://check.server.com.uy/ ({})".format(now,count))
            else:
                if (count>0):

                    x = requests.get("https://check.server.com.uy/myip.php",timeout=5)
                    count = 0
                    notification("La conexion fue restaurada")
                    print("{} La conexion fue restaurada (Public IP {})".format(now,x.text))
        except:
            count += 1
            print("{} Fallo intentando conectar con https://check.server.com.uy/ ({})".format(now,count))


        if count > attempt:
            notification("{} Despertate paparulo que estas sin internet".format(now),sound=True)

        time.sleep(interval)


except Exception as e:
    notification("Despertate, que este script no funciona")

Se puede modificar la ruta de playsound para asignar un sonido distintivo a la notificación, además el script necesitará instalar las liberias requests, playsound y gi, nada del otro mundo, al ejecutarlo:

./internetstatus

La salida será algo similar a esto:

2022-12-31 14:49:02 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:49:07 Fallo intentando conectar con https://check.server.com.uy/ (2)
2022-12-31 14:49:12 Fallo intentando conectar con https://check.server.com.uy/ (3)
2022-12-31 14:49:17 Fallo intentando conectar con https://check.server.com.uy/ (4)
2022-12-31 14:49:22 Fallo intentando conectar con https://check.server.com.uy/ (5)
2022-12-31 14:49:27 La conexion fue restaurada (Public IP XXX.XXX.XXX.XXX)
2022-12-31 14:50:34 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:50:44 Fallo intentando conectar con https://check.server.com.uy/ (2)
2022-12-31 14:50:50 Fallo intentando conectar con https://check.server.com.uy/ (3)
2022-12-31 14:50:55 Fallo intentando conectar con https://check.server.com.uy/ (4)
2022-12-31 14:51:00 Fallo intentando conectar con https://check.server.com.uy/ (5)
2022-12-31 14:51:05 Fallo intentando conectar con https://check.server.com.uy/ (6)
2022-12-31 14:51:10 Fallo intentando conectar con https://check.server.com.uy/ (7)
2022-12-31 14:51:15 La conexion fue restaurada (Public IP XXX.XXX.XXX.XXX)
2022-12-31 14:51:45 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:51:55 Fallo intentando conectar con https://check.server.com.uy/ (2)
2022-12-31 14:52:05 Fallo intentando conectar con https://check.server.com.uy/ (3)
2022-12-31 14:52:15 Fallo intentando conectar con https://check.server.com.uy/ (4)
2022-12-31 14:52:25 La conexión fue restaurada (Public IP XXX.XXX.XXX.XXX)
2022-12-31 14:52:51 Fallo intentando conectar con https://check.server.com.uy/ (1)
2022-12-31 14:53:01 La conexión fue restaurada (Public IP XXX.XXX.XXX.XXX)

No es una solución perfecta, aunque me resulto de gran ayuda para saber cuando me quedo sin internet, especialmente durante la noche de guardia, espero que los saque de un apuro como a mi.

Compartir
Publicado por
Alvaro De León

Entradas recientes

Estadisticas de EasyMySQL

Normalmente, a las estadísticas del blog no le presto demasiada atención, sin embargo, trabajando en…

4 days hace

Nueva pagina de Publicaciones

La idea principal detrás de este blog es marca personal, el blog es para centralizar…

2 weeks hace

Migrar una maquina virtual desde VirtualBox a KVM

El migrar el disco duro es bastante sencillo como se verá a continuación, la principal…

3 weeks hace

Instalar QEMU/KVM y Virtual Machine Manager

Cuando se trata de virtualización en el escritorio, una de las primeras opciones son sin…

1 month hace

Instalar adaptador WIFI TP-Link AX 1800/ Archer TX20U en Debian y Ubuntu

Siempre he sido un ferviente defensor de una conexión por cable UTP para trabajar por…

2 months hace

Nuevo dominio para el blog, otra vez!!!

Al fin pude recuperar alvarodeleon.com, no es que lo hubiera perdido, fue peor, lo deje…

3 months hace