Capturar la salida de un comando `ping' a cualquier host durante al menos 2 horas, y graficar su distribución en escala lineal y luego en escala log-log. Entregar un pequeño informe en PDF.
Mediante este script de python se hace el ping durante dos horas y luego se grafica.
import subprocess
import re
import time
import numpy as np
import matplotlib.pyplot as plt
def ping(host):
# Comando ping
ping_cmd = f"ping -i 1 {host}"
# Inicializar listas para almacenar los tiempos de ping
ping_times = []
# Ejecutar el comando ping
ping_process = subprocess.Popen(ping_cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
# Loop para leer la salida del comando ping
start_time = time.time()
while (time.time() - start_time) < 7200: # 7200 segundos = 2 horas
output = ping_process.stdout.readline().decode('utf-8')
if output:
# Extraer el tiempo de ping utilizando expresiones regulares
time_match = re.search(r"time=(\\d+\\.?\\d*)", output)
if time_match:
ping_time = float(time_match.group(1))
ping_times.append(ping_time)
# Graficar los datos
plot_ping_distribution(ping_times)
def plot_ping_distribution(ping_times):
# Crear histograma lineal
plt.figure(figsize=(10, 5))
plt.subplot(1, 2, 1)
plt.hist(ping_times, bins=50, color='blue', alpha=0.7)
plt.title('Distribución de Ping (Lineal)')
plt.xlabel('Tiempo de Ping (ms)')
plt.ylabel('Frecuencia')
# Crear histograma log-log
plt.subplot(1, 2, 2)
plt.hist(ping_times, bins=50, color='green', alpha=0.7, log=True)
plt.title('Distribución de Ping (Log-Log)')
plt.xlabel('Tiempo de Ping (ms)')
plt.ylabel('Frecuencia (log)')
plt.xscale('log')
plt.yscale('log')
# Guardar el gráfico como imagen
plt.savefig('ping_distribution.png')
# Mostrar el gráfico
plt.show()
if __name__ == "__main__":
host = input("Introduce el host para hacer ping: ")
ping(host)