Pitón

Script de Python para monitorear la conexión de red

Script de Python para monitorear la conexión de red
La necesidad de tener nuestros dispositivos siempre conectados a Internet se está convirtiendo en una necesidad más básica que en un privilegio añadido.

Tener aplicaciones y dispositivos que necesitan registrar, enviar y recibir datos al mundo exterior es fundamental. Por lo tanto, tener una herramienta que le permita monitorear cuando su red se cae puede ayudarlo a solucionar problemas de la red o detener las aplicaciones antes de enviar un montón de errores de registro.

En el tutorial de hoy, crearemos un monitor de red simple que monitorea continuamente su conectividad a Internet enviando solicitudes de ping a un recurso externo. El script que crearemos también mantendrá registros de cuando Internet está inactivo y la duración del tiempo de inactividad:

Requerimientos del proyecto

Para este proyecto, solo vamos a necesitar:

Lógica del proyecto

Antes de sumergirnos en la parte de codificación, analicemos y comprendamos lo que estamos tratando de lograr:

¿Qué es el tiempo de inactividad y actividad de la red??

Cuando hablamos de red en funcionamiento y tiempo de inactividad, nos referimos al período en el que la conexión de red no está disponible por completo y, por lo tanto, no podemos comunicarnos con dispositivos fuera de nuestra red. Cuanto más tiempo no esté disponible Internet, mayor será el tiempo de inactividad.

Cómo determinar el tiempo de inactividad

Ahora que sabemos qué es el tiempo de inactividad de Internet, es posible que se pregunte "¿cómo podemos determinarlo??"

Sin complicar nuestro código, podemos ir con ping. Un ping es un método en el que continuamente hacemos ping a un servidor confiable, tal vez Cloudflare o Google DNS, y luego esperamos una respuesta.

Si hacemos ping al servidor y no hay respuesta, tomamos nota de esa hora específica y continuamos haciendo ping hasta que recibimos un ping y anotamos la hora.

Teniendo la diferencia horaria, podemos notar cuándo estuvo inactivo Internet y por cuánto tiempo.

También debemos tener cuidado al hacer ping a un solo servidor porque podemos confundir el ping erróneamente con un ataque DDoS, lo que podría hacer que nuestra dirección IP se bloquee, lo que produciría resultados negativos.

Aquí hay un diagrama de flujo que explica este concepto:

Hablar es barato; ahora profundicemos en el código que muestra cómo implementar esta lógica:

Ahora muéstrame el código

Como de costumbre, en Python, comenzamos importando las bibliotecas requeridas. A continuación, creamos un archivo de registro en el directorio de trabajo actual.

Usamos la biblioteca de sockets para enviar una solicitud a una dirección IP externa en la primera función. Para este ejemplo, usamos la dirección DNS pública de Cloudflare, que tiene un tiempo de actividad muy alto. También pasamos el puerto, y como es un servidor DNS, usamos el puerto 53.

Luego verificamos que tenemos acceso al directorio del archivo de registro y salimos si no tenemos acceso.

El siguiente paso es calcular el tiempo que la conexión de red está inactiva. Finalmente, envolvemos toda la funcionalidad en un bucle, como se muestra en el siguiente código.

importar socket
tiempo de importación
importar fecha y hora
importar sistema operativo
importar sys
LOG_FNAME = "red.Iniciar sesión"
ARCHIVO = os.camino.unirse (os.getcwd (), LOG_FNAME)
def send_ping_request (host = "1.1.1.1 ", puerto = 53, tiempo de espera = 3):
intentar:
enchufe.setdefaulttimeout (tiempo de espera)
s = enchufe.enchufe (enchufe.AF_INET, enchufe.SOCK_STREAM)
s.conectar ((host, puerto))
excepto OSError como error:
falso retorno
demás:
s.cerca()
volver verdadero
def write_permission_check ():
intentar:
con open (FILE, "a") como archivo:
aprobar
excepto OSError como error:
print ("Falló la creación del archivo de registro")
sys.Salida()
finalmente:
aprobar
def calcular_tiempo (iniciar, detener):
diferencia_tiempo = detener - iniciar
segundos = float (str (diferencia_tiempo.total_seconds ()))
return str (fecha y hora.timedelta (segundos = segundos)).separar(".") [0]
def mon_net_connection (ping_freq = 2):
monitor_start_time = fecha y hora.fecha y hora.ahora()
motd = "El monitoreo de la conexión de red comenzó en:" + str (monitor_start_time).separar(".") [0] +" Enviando solicitud de ping en "+ str (ping_freq) +" segundos "
imprimir (motd)
con open (FILE, "a") como archivo:
expediente.escribir ("\ n")
expediente.escribir (motd + "\ n")
mientras que es verdadero:
si send_ping_request ():
hora.dormir (ping_freq)
demás:
down_time = fecha y hora.fecha y hora.ahora()
fail_msg = "Conexión de red no disponible en:" + str (down_time).separar(".") [0]
imprimir (fail_msg)
con open (FILE, "a") como archivo:
expediente.escribir (fail_msg + "\ n")
i = 0
mientras no send_ping_request ():
hora.dormir (1)
i + = 1
si i> = 3600:
i = 0
ahora = fecha y hora.fecha y hora.ahora()
continous_message = "Red no disponible persistente en:" + str (ahora).separar(".") [0]
imprimir (mensaje_continuo)
con open (FILE, "a") como archivo:
expediente.escribir (mensaje_continuo + "\ n")
up_time = fecha y hora.fecha y hora.ahora()
uptime_message = "Conectividad de red restaurada en:" + str (up_time).separar(".") [0]
tiempo_descarga = tiempo_calculado (tiempo_descarga, tiempo_activa)
_m = "La conexión de red no estuvo disponible durante" + tiempo de inactividad
imprimir (uptime_message)
imprimir (_m)
con open (FILE, "a") como archivo:
expediente.escribir (uptime_message + "\ n")
expediente.escribir (_m + "\ n")
mon_net_connection ()

Si ejecuta este script, obtendrá un resultado similar al que se muestra a continuación:

Conclusión

Usando el script anterior, podemos monitorear cuando se pierde la conexión de red y registrarla constantemente hasta que esté disponible. Este sencillo script está abierto a mejoras. Siéntase libre de ajustar el código para que se ajuste a sus necesidades y ampliarlo.

Los 5 mejores productos ergonómicos de mouse de computadora para Linux
¿El uso prolongado de la computadora causa dolor en la muñeca o los dedos?? ¿Sufre de rigidez en las articulaciones y constantemente tiene que dar la ...
Cómo cambiar la configuración del mouse y el panel táctil con Xinput en Linux
La mayoría de las distribuciones de Linux se envían con la biblioteca "libinput" de forma predeterminada para manejar eventos de entrada en un sistema...
Vuelva a asignar los botones del mouse de manera diferente para diferentes programas con X-Mouse Button Control
Tal vez necesite una herramienta que pueda hacer que el control de su mouse cambie con cada aplicación que use. Si este es el caso, puede probar una a...