Enunciado

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.

Solución

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)

Lab Ping Gallino (1).pdf