import argparse from pythonping import ping import ipaddress import requests import logging DISCORD_WEBHOOK_URL='https://discord.com/api/webhooks/1229025346385608824/kIt2dp2znu0jR85QbOPmoMAteHaB9BCJDTMfn0cHE9mwpxHkbUNc9By2Y7n6gpufoyco' logging.basicConfig(filename='/var/log/status.log', level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s') def read_document(document_name): with open(document_name, 'r') as file: # Leer todas las líneas del archivo y guardarlas en un conjunto return {linea.rstrip('\n') for linea in file} def parseArguments(): # Crear un objeto ArgumentParser parser = argparse.ArgumentParser(description='Ejemplo de script con flags') # Agregar los argumentos con sus respectivos flags parser.add_argument('-F', '--fail', action='store', dest='failed', help='Indicar un archivo con lista de Fails') parser.add_argument('-H', '--host', action='store', dest='host', help='Indicar un archivo con lista de hosts') try: # Parsear los argumentos de la línea de comandos return parser.parse_args() except argparse.ArgumentError as e: # Si ocurre un error al analizar los argumentos, mostrar un mensaje de error #print("Error:", e) # Mostrar el mensaje de ayuda parser.print_help() exit() def toIP(hosts): ips = set() for host in hosts: try: ip = ipaddress.IPv4Address(host) ips.add(ip) except ipaddress.AddressValueError: logging.info(f"La entrada '{host}' no es una dirección IP válida.") return ips def check_ping(hosts, fails): for host in hosts: try: response = ping(str(host), count=4, timeout=2) # verbose=True -> Para ver la respuesta del ping if not response.success(): logging.info(f"Bad ping: {host}") if (host not in fails): send_discord_message(f"Ping fallido para el host: {host}") # Añadir el host a fails fails.add(host) elif response.success(): if host in fails: fails.remove(host) send_discord_message(f"{host} disponible de nuevo") logging.info(f"Ping correct: {host}") except Exception as e: logging.info(f"Bad ping: {host}") save_status(fails) def save_status(fails): with open("failed.txt", "w") as file: for fail in fails: file.write(str(fail) + "\n") file.close def send_discord_message(message): data = { "content": message } try: response = requests.post(DISCORD_WEBHOOK_URL, json=data) response.raise_for_status() except requests.exceptions.RequestException as e: logging.info(f"Error sending Discord message: {e}") else: logging.info("Discord message sent successfully!") if __name__ == '__main__': args = parseArguments() ips_and_hosts = set() fails = set() if args.host: ips_and_hosts.update(toIP(read_document(args.host))) fails.update(toIP(read_document(args.failed))) check_ping(ips_and_hosts, fails)