En la era digital actual, mantener la salud de la red es más crucial que nunca. Ya sea que administres una red doméstica o la infraestructura de IT de una gran corporación, entender cómo interactúan los dispositivos en tu red puede ser la diferencia entre un día normal y un desastre total. Aquí es donde entra en juego nuestro pequeño, pero poderoso, script en Python 🐍.
Este proyecto se centra en una tarea fundamental: el ping a una lista de hosts en la red. El ping, ese eco que enviamos para medir la latencia y la pérdida de paquetes, es una herramienta esencial en el kit de herramientas de cualquier administrador de sistemas o entusiasta de la tecnología. Pero, ¿qué pasa cuando necesitamos hacer ping a múltiples hosts? Hacerlo manualmente es tedioso y propenso a errores. Aquí es donde nuestro script automatizado brilla, permitiéndonos hacer ping a múltiples hosts de una lista y, lo que es mejor, visualizar los resultados de una manera mucho más amigable: en un archivo de Excel.
Antes de sumergirnos en el código, necesitamos asegurarnos de que Python esté instalado en nuestra máquina. Python es un lenguaje de programación poderoso y flexible, amado tanto por programadores experimentados como por novatos debido a su simplicidad y versatilidad. Si aún no lo tienes instalado, puedes descargarlo desde el sitio oficial de Python. Asegúrate de marcar la opción que dice «Add Python to PATH» durante la instalación, lo que facilitará la ejecución de scripts desde la línea de comandos.
Nuestro script de ping utilizará algunas librerías externas para funcionar correctamente. La más importante es openpyxl
, una librería que nos permite crear y modificar archivos de Excel con Python. Para instalar esta y otras librerías necesarias, abrirás una terminal o línea de comandos y ejecutarás el siguiente comando:
pip install openpyxl
Con Python y openpyxl
instalados, estamos listos para adentrarnos en el mundo del ping automatizado con Python.
Vamos a analizar el código Python que permite realizar pings a los hosts de la lista y capturar los resultados para su posterior análisis.
import subprocess
import os
import sys
import datetime
from openpyxl import Workbook
from openpyxl.styles import PatternFill
from openpyxl.formatting.rule import CellIsRule
def is_admin():
try:
import ctypes
return ctypes.windll.shell32.IsUserAnAdmin() != 0
except AttributeError:
return os.getuid() == 0
def ping_ip(ip_address):
try:
output = subprocess.check_output(["ping", "-n", "1", ip_address], stderr=subprocess.STDOUT, universal_newlines=True)
print(output) # Muestra la salida del comando ping
for line in output.split("\n"):
if "tiempo=" in line:
time_ms = line.split("tiempo=")[1].split("ms")[0].strip()
return True, time_ms
return False, "0"
except subprocess.CalledProcessError as e:
print(e.output) # Muestra la salida en caso de error
return False, "0"
def main():
if not is_admin():
print("Este script requiere privilegios de administrador.")
sys.exit(1)
if not os.path.exists("ips.txt"):
print("El archivo ips.txt no existe.")
sys.exit(1)
wb = Workbook()
ws = wb.active
ws.append(["IP", "Estado", "Tiempo (ms)", "Fecha y Hora"])
ws['B1'] = 'Estado'
ws['B2'] = 'Verdadero'
ws['B3'] = 'Falso'
with open("ips.txt", "r") as file:
ips = file.read().splitlines()
for ip in ips:
is_up, time_ms = ping_ip(ip)
current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
if is_up:
print(f"{ip} está arriba, tiempo de respuesta: {time_ms}ms")
ws.append([ip, "Verdadero", time_ms, current_time])
ws.conditional_formatting.add('B1:B2',
CellIsRule(operator='equal', formula=['"Verdadero"'], fill=PatternFill(start_color='00FF00', end_color='00FF00', fill_type='solid')))
else:
print(f"{ip} no responde.")
ws.append([ip, "Falso", time_ms, current_time])
ws.conditional_formatting.add('B1:B2',
CellIsRule(operator='equal', formula=['"Falso"'], fill=PatternFill(start_color='FF0000', end_color='FF0000', fill_type='solid')))
wb.save("resultados_ping.xlsx")
print("Resultados exportados a resultados_ping.xlsx.")
if __name__ == "__main__":
main()
Este código es el núcleo de nuestra automatización de ping. Es simple pero robusto, y nos permite realizar pings a múltiples hosts de manera eficiente y sin esfuerzo manual.
Antes de que podamos ejecutar nuestro script y empezar a enviar pings a diestro y siniestro, necesitamos preparar el terreno. Esto significa tener una lista de hosts a los que queremos hacer ping. Aquí te explico cómo hacerlo.
El script espera recibir un archivo de texto (ips.txt
) donde cada línea contiene un host diferente. Es crucial que este archivo esté bien organizado para evitar errores durante la ejecución del script. Aquí tienes un ejemplo de cómo podría lucir tu archivo:
Cada línea representa un host diferente. Pueden ser direcciones IP o nombres de dominio; nuestro script es lo suficientemente inteligente para manejar ambos.
Esta lista es el núcleo de nuestro proyecto. Al automatizar el ping a múltiples hosts, podemos identificar rápidamente cualquier problema de conectividad en la red, verificar la disponibilidad de sitios web o servidores, y realizar muchas otras tareas de diagnóstico de red.
Una buena práctica es mantener esta lista actualizada y revisarla periódicamente para asegurarnos de que todos los hosts siguen siendo relevantes para nuestras necesidades de monitoreo de red.
Ahora que hemos preparado nuestra lista de hosts y entendemos cómo funciona nuestro script de ping en Python, es hora de ponerlo en acción.
Preparación del Entorno: Asegúrate de que tienes Python instalado en tu sistema y que has instalado la librería openpyxl
utilizando el comando pip install openpyxl
.
Preparación de la Lista de Hosts: Crea un archivo de texto llamado ips.txt
y agrega los hosts que deseas pinguear, uno por línea, como se explicó anteriormente.
Ejecución del Script: Abre una terminal o línea de comandos, navega hasta el directorio donde se encuentra tu script de Python y ejecuta el comando:
python ping.py
Donde nombre_del_script.py
es el nombre de tu archivo Python que contiene el código de ping.
Observando la Interacción con la Red: Una vez que ejecutas el script, verás cómo comienza a hacer ping a cada uno de los hosts de tu lista. Observa los resultados en la consola y prepárate para maravillarte con la eficiencia de tu script.
Ahora estás listo para lanzar tu script y dejar que haga su magia. Pero espera, ¡aún hay más! Después de que termine de hacer ping a todos los hosts, necesitamos encontrar una forma más visual y amigable de analizar los resultados. Ahí es donde entra en juego Excel.
Después de ejecutar nuestro script, los resultados se almacenan en un archivo de Excel llamado resultados_ping.xlsx
. Este paso representa un avance significativo en comparación con el simple hecho de leer líneas de texto desde una terminal. Veamos cómo nuestro script aprovecha Excel para presentar los datos de manera eficaz.
El archivo de Excel generado contiene las siguientes columnas:
Esta organización de datos no solo facilita la identificación rápida de problemas de conectividad sino que también permite realizar un seguimiento de la disponibilidad de los hosts a lo largo del tiempo.
Aunque nuestro script ya realiza un trabajo excelente al exportar los datos a Excel, siempre hay margen para personalizar y mejorar. Por ejemplo, podrías agregar fórmulas o macros en Excel para automatizar aún más el análisis de los datos. O tal vez, personalizar el estilo de las celdas basado en condiciones específicas, como cambiar el color de fondo de las filas basado en el tiempo de respuesta, para destacar visualmente aquellos hosts que superen cierto umbral de latencia.
En este artículo, hemos explorado cómo utilizar Python para automatizar el proceso de ping a una lista de hosts en una red. Hemos aprendido cómo preparar el entorno, entender y ejecutar el código Python para ping, y visualizar los resultados en un archivo de Excel. Algunos puntos clave que hemos cubierto incluyen:
Aunque nuestro proyecto de ping automatizado en Python es funcional y útil, siempre hay espacio para mejoras y ampliaciones. Algunas ideas para futuras mejoras podrían incluir:
Explorar estas áreas de mejora podría llevar nuestro proyecto al siguiente nivel y hacerlo aún más valioso para la administración y mantenimiento de redes.
Aunque debo decir que en mi maquina corre, es posible que en la tuya no y aquí unos consejos:
Todas las lineas del principio del script que anteceden del import, son librerías, debes asegurarte de tenerlas instaladas.
import ctypes
import subprocess
import os
import sys
import datetime
Si el resultado del script es algo como esto:
Significa que el archivo de Excel esta abierto, cierralo y vuelve a ejecutar el script.
Espero te sirva en tus andanzas, y conmigo es hasta la próxima. Chau!
Para descargar el paquete de archivos rellena el formulario