juliobm algunos videos algunas notas algunos scripts aprendiendo

Detectar y avisar de equipos caídos que son vitales de nuestra red mediante ping

Una forma de ver si un equipo importante de nuestra red está caído es si responde a ping o no.

El siguiente script, instalado en uno de ellos, nos avisa mediante email si alguno no responde bien.

Soy consciente de que puede caerse el equipo donde está instalado y por tanto no avisar de posibles caídas del resto o de incluso, en determinadas circustancias, puede dar falsos positivos por algún relantecimiento de la red.

De momento me ha sido útil incluso para detectar malfuncionamiento de algunos de los routers de mi red por microcortes.

El siguiente script en Python,

Este script yo lo tengo puesto que se ejecute cada 5min.

Por supuesto tiene muchas mejoras, como cargar la lista de equipos a controlar de un fichero .ini por ejemplo, así como los datos del email (destinatario, datos de smtp, etc..), el número de echos del ping, etc… pero como me funciona y es para mi uso particular … me da pereza.

Además está para equipos en castellano y en windows (en linux param -c por -n)

Lo tengo instalado desde ++junio 2011++ con muy buen resultado, y es por ello que no me pide modificar nada.

ping_vitales.pyw (en gists)

#-------------------------------------------------------------------------------
# Name:        ping_nodos_vitales
# Purpose:     ping a los puntos de acceso de radiofrecuencia
#               y al router netlan
#               y a los concentradores
#               cada 5 min de forma aleatoria
#               solounocadavez = random.randrange(151,153)

#
# Author:      julio
#
# Created:     20/06/2011
# Copyright:   (c) julio 2011
# Licence:     <your licence>
#-------------------------------------------------------------------------------
#
import subprocess, os
import random,datetime, time
from envia_email import mandaemail


comodin = '127.0.0.1'
concen_va = '10.xx.y.50'
concen_za = '10.xx.z.50'
router_netlan_va = '10.xx.y.65'
router_netlan_za = '10.xx.z.65'
router_fedicom = '10.xx.y.1'
router_correo = '10.xx.y.66'
pa_1 = '10.xx.y.151'
pa_2 = '10.xx.y.152'
controla_dom = '10.xx.y.38'
ip_fedicom = '214.xx.y.143'
ip_correo = '81.xx.y.216'
ip_knapp = '211.xx.y.189'
fic_ping = 'ping_vitales_ultimo.txt'
fic_log = "ping_vitales_log.txt"
fich_error = open('ping_vitales_error.txt','a')
email = 'si'

nodos_vitales = [concen_va, concen_za, router_netlan_va, router_netlan_za, router_fedicom, pa_1, pa_2, controla_dom, ip_fedicom, ip_correo, ip_knapp]
solounocadavez = random.sample(nodos_vitales, len(nodos_vitales))
puntosacceso = solounocadavez
dt = datetime.datetime.now()

for host in puntosacceso:
    ejecuta = ' ping -n 3 '+host
    ping = subprocess.call(ejecuta,shell=True,stdout=open(fic_ping,'w'),stderr = fich_error)
    salida = open(fic_ping,'r').read()
    if salida.find('100% perdidos') <> -1:
        fich_log =open(fic_log,"a+")
        fich_log.write('nodo vital caido '+ str(host) + '  '+ str(dt) + '\n')
        fich_log.close()
        # flag para no repetir
        fic_flag = 'ping_vitales_caido_'+ host.replace(".","_") + '__' + dt.strftime("%Y%m%d_%H")+ 'h.txt'
        if (email=='si') and (os.path.exists(fic_flag)==False):
            fich_flag=open(fic_flag,"w+")
            fich_flag.close()
            texto=salida
            adjunto=''
            asunto = host.replace(".","_") + '_caido_' + dt.strftime("%Y%m%d_%Hh%M")
            mandaemail('remitente','passw','smtp',['aquien@quieras.com'],asunto,texto,adjunto)
            time.sleep(1)  # damos unos segundos para respirar por si acaso

pd: para el envio por email se necesita otro script en python (mandaemail.py)