Opciones avanzadas de ping y aplicaciones prácticas
Ahora que comprendes los conceptos básicos del comando ping y cómo interpretar su salida, exploremos algunas opciones avanzadas y escenarios prácticos en los que el ping es útil para el diagnóstico de redes.
Primero, creemos un sencillo script de shell que nos ayudará a monitorear un host continuamente y registrar los resultados:
nano ~/project/monitor_host.sh
Escribe el siguiente script en el editor:
#!/bin/bash
## Simple network monitoring script
HOST=$1
INTERVAL=$2
LOG_FILE=~/project/ping_log.txt
echo "Starting monitoring of $HOST at $(date)" > $LOG_FILE
while true; do
ping -c 1 $HOST | grep "time=" >> $LOG_FILE
sleep $INTERVAL
echo "---" >> $LOG_FILE
done
Guarda el archivo presionando Ctrl+O, luego Enter, y sal del editor con Ctrl+X.
Haz el script ejecutable:
chmod +x ~/project/monitor_host.sh
Ahora, ejecutemos el script durante unos segundos para monitorear el servidor DNS de Google:
~/project/monitor_host.sh 8.8.8.8 2 &
sleep 10
kill $!
Esto hará lo siguiente:
- Iniciará el script de monitoreo en segundo plano
- Esperará 10 segundos
- Detendrá el script
Examinemos el registro:
cat ~/project/ping_log.txt
Deberías ver varios resultados de ping con marcas de tiempo.
Ahora, exploremos algunas opciones más avanzadas de ping:
- Establecer el TTL (Time To Live - Tiempo de vida):
ping -c 4 -t 64 8.8.8.8
La opción -t establece el valor de TTL, que define cuántos saltos de red puede atravesar un paquete antes de ser descartado.
- Ping de inundación (requiere sudo):
sudo ping -c 10 -f 8.8.8.8
La opción -f envía paquetes tan rápido como sea posible. Esto es útil para pruebas de estrés, pero debe usarse con precaución.
- Ping audible:
ping -c 4 -a 8.8.8.8
La opción -a produce un sonido audible cuando un host responde, lo cual es útil cuando estás solucionando problemas y no estás mirando la pantalla.
- Temporización con límite de tiempo:
ping -c 4 -w 2 8.8.8.8
La opción -w establece un límite de tiempo en segundos después del cual el ping se detendrá, independientemente de cuántos paquetes se hayan enviado.
Exploremos un escenario práctico de solución de problemas. Crearemos una simple visualización de la ruta de red hacia un destino utilizando traceroute (que funciona de manera similar al ping, pero muestra la ruta que siguen los paquetes):
traceroute 8.8.8.8
Este comando muestra cada salto (enrutador) que los paquetes atraviesan para llegar al destino. Verás algo como:
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 _gateway (10.0.2.2) 0.113 ms 0.087 ms 0.083 ms
2 * * *
3 * * *
4 8.8.8.8 14.080 ms 13.849 ms 14.399 ms
Los asteriscos (*) representan tiempos de espera agotados o enrutadores que no responden a las solicitudes de traceroute.
Ahora, creemos una simple tabla para documentar nuestros resultados de ping para diferentes hosts:
echo -e "Host\tMin Time\tAvg Time\tMax Time\tPacket Loss" > ~/project/ping_results.txt
Agreguemos el DNS de Google a nuestra tabla:
result=$(ping -c 5 8.8.8.8 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 8.8.8.8 | grep -o "[0-9]*%" | head -1)
echo -e "8.8.8.8\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
Y agreguemos el DNS de Cloudflare:
result=$(ping -c 5 1.1.1.1 | tail -1)
min=$(echo $result | awk -F/ '{print $4}')
avg=$(echo $result | awk -F/ '{print $5}')
max=$(echo $result | awk -F/ '{print $6}')
loss=$(ping -c 5 1.1.1.1 | grep -o "[0-9]*%" | head -1)
echo -e "1.1.1.1\t$min ms\t\t$avg ms\t\t$max ms\t\t$loss" >> ~/project/ping_results.txt
Veamos nuestra tabla de resultados:
cat ~/project/ping_results.txt
Deberías ver una tabla formateada con estadísticas de ping para ambos servidores DNS, que puedes utilizar para comparar su rendimiento.