Ping es uno de los comandos de red más utilizados en Linux y otros sistemas operativos. Este se utiliza principalmente para comprobar si un host remoto es alcanzable o no. El host remoto puede ser un servidor web, tu router o un sistema en tu red local.
¿Cómo funciona el ping? En realidad, envía pequeños paquetes ICMP al host remoto y espera la respuesta. Si el host está activo, deberías ver una respuesta.
Es como la tecnología de sonar utilizada en los submarinos. Los submarinos envían pulsos de señal de audio y esperan que el eco regrese.
Entonces, ¿cómo se usa Ping en Linux? ¿Cuáles son las diferentes opciones del comando Ping? Permíteme mostrarte algunos de los usos comunes del comando Ping.
Uso del comando ping en Linux
Puedes utilizar el comando ping tanto con la dirección IP como con el nombre de host/URL.
Supongamos que haces ping a Google, este enviará paquetes ICMP del tamaño de 56 bytes a google.com.
$ ping google.com
PING google.com (142.251.34.206) 56(84) bytes of data.
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=1 ttl=55 time=22.2 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=2 ttl=55 time=22.2 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=3 ttl=55 time=19.7 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=4 ttl=55 time=18.8 ms
^C
--- google.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 18.785/20.724/22.223/1.501 ms
Tienes que detener manualmente el comando ping, de lo contrario seguirá ejecutándose. Puedes usar el atajo de terminal Ctrl+C para detener el comando ping en Linux, como hice en el ejemplo anterior.
Cuando detengas el comando ping, te presentará un resumen de la transmisión. Puedes ver estadísticas como el número de paquetes ICMP transmitidos, paquetes recibidos, paquetes perdidos, etc.
Ahora que sabes cómo hacer ping en Linux, veamos algunas de las otras opciones del comando ping.
Enviar sólo N número de paquetes
Si no quieres que el comando ping se ejecute eternamente sin detenerlo manualmente, puedes usar la opción -c.
Con esto, puedes especificar el número de paquetes que el comando ping debe enviar antes de detenerse automáticamente.
$ ping -c 2 104.248.179.115
PING 104.248.179.115 (104.248.179.115) 56(84) bytes of data.
--- 104.248.179.115 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1010ms
Enviar ping sólo durante un tiempo limitado
Además de establecer el número de paquetes a enviar, también puedes establecer durante cuánto tiempo se enviarán los paquetes.
Por ejemplo, si quieres enviar paquetes de ping sólo durante 5 segundos, puedes usarlo así:
$ ping -w 5 google.com
PING google.com (142.251.34.206) 56(84) bytes of data.
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=1 ttl=55 time=50.8 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=2 ttl=55 time=31.8 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=3 ttl=55 time=20.4 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=4 ttl=55 time=20.0 ms
64 bytes from qro02s27-in-f14.1e100.net (142.251.34.206): icmp_seq=5 ttl=55 time=19.8 ms
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4006ms
rtt min/avg/max/mdev = 19.798/28.556/50.771/12.007 ms
Cambiar el intervalo de tiempo entre dos pings
Por defecto, ping envía los paquetes con un intervalo de un segundo. Puede cambiar este intervalo de tiempo con la opción -i.
Para enviar los paquetes ICMP con un intervalo de 3 segundos, puede utilizar el comando Ping de la siguiente manera:
ping -i 3 31.13.90.36
También puedes disminuir el intervalo de tiempo entre los pings.
ping -i 0.5 31.13.90.36
Sin embargo, si intenta disminuir el intervalo de tiempo por debajo de 0,2 segundos (200 ms), verás un error:
ping -i 0.1 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 56(84) bytes of data.
ping: cannot flood; minimal interval allowed for user is 200ms
No te preocupes. Todavía puedes hacer ping con un intervalo inferior a 200 ms. Pero para hacer eso, necesitas usar el ping con privilegios de root.
sudo ping -i 0.1 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 56(84) bytes of data.
64 bytes from 31.13.90.36: icmp_seq=1 ttl=49 time=470 ms
64 bytes from 31.13.90.36: icmp_seq=2 ttl=49 time=372 ms
Cambiar el tamaño del paquete
El tamaño de paquete ICMP por defecto enviado por Ping es de 56 bytes. Esto puede ser cambiado también con la ayuda del comando -s.
ping -s 100 31.13.90.36
PING 31.13.90.36 (31.13.90.36) 100(128) bytes of data.
108 bytes from 31.13.90.36: icmp_seq=1 ttl=49 time=234 ms
108 bytes from 31.13.90.36: icmp_seq=2 ttl=49 time=257 ms
108 bytes from 31.13.90.36: icmp_seq=3 ttl=49 time=280 ms
^C
--- 31.13.90.36 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 234.208/257.352/280.424/18.867 ms
Ataque DoS con Ping flooding aka Ping of Death
Uno de los ataques DoS más simples es el Ping of Death. En este tipo de ataque, el atacante envía un gran número de peticiones de ping en un periodo de tiempo muy corto. Si el servidor no está bien configurado, se desmoronará al manejar la solicitud de ping y el sitio web se caerá.
El comando ping tiene una «función» incorporada para esto. Se llama ping flooding y se puede conseguir con la opción -f. Necesitarás derechos de sudo para ejecutar esta opción con un intervalo de cero.
$ sudo ping -f google.com
PING google.com (142.251.34.206) 56(84) bytes of data.
.^C
--- google.com ping statistics ---
254 packets transmitted, 253 received, 0.393701% packet loss, time 4132ms
rtt min/avg/max/mdev = 16.146/19.394/53.531/4.470 ms, pipe 4, ipg/ewma 16.333/19.380 ms
Cuando ejecutes este comando, verás que aparecen y desaparecen algunos puntos en la salida. Cada ‘.’ denota una petición mientras que la respuesta es un retroceso (por eso los puntos desaparecen).
Esta opción de flood ping es útil para probar la capacidad de carga de un servidor.
Consejo adicional: Enviar pings audibles
Puedes enviar pings audibles con la opción -a. Con esto, escucharás un pitido por cada ping exitoso.
ping -a google.com
Ten en cuenta que no todas las distribuciones de Linux están configuradas para hacer el ruido de pitido.
Solución de problemas del comando Ping
Hasta ahora lo que hemos visto son los ejemplos más comunes del comando ping. Pero esto no ocurrirá siempre. Veamos algunos de los errores comunes que puede ver y entender la razón de esos errores.
No hay respuesta para el ping
Puedes notar que ciertos hosts no responden a la solicitud de ping. Parece que el comando ping se ha colgado porque no hay respuesta. El comando simplemente se queda ahí, ni siquiera se agota el tiempo de espera.
Si terminas el comando ping, verás algunas estadísticas extrañas.
ping intel.com
PING intel.com (13.91.95.74) 56(84) bytes of data.
^C
--- intel.com ping statistics ---
100 packets transmitted, 0 received, 100% packet loss, time 101362m
Como puede ver, se han transmitido 100 paquetes, pero no se ha recibido respuesta para ninguno de ellos.
Lo más probable es que sea porque algunos servidores descartan los paquetes ICMP. Esta es una medida de seguridad para evitar la inundación de ping.
Host de destino inalcanzable
Este error puede ocurrir por una de las dos razones:
- O bien el sistema local no tiene ruta hacia el host remoto
- o el router del punto final no tiene ruta hacia el host remoto
Si sólo ves el error «host de destino inalcanzable», significa que tu sistema no ha podido encontrar una ruta hacia el host remoto.
Por otro lado, si ves el error en la parte «Respuesta de » de la respuesta, significa que el paquete fue enviado fuera de tu red, pero no pudo llegar al destino.
Algunas veces los servidores también bloquean el tráfico ICMP que podría mostrar este error.
La solicitud se agota
Este error significa que los paquetes llegaron al servidor remoto pero la respuesta no pudo llegar a su sistema. El problema podría ser la pérdida de paquetes o un error de enrutamiento.
¿Listo para hacer ping?
Espero que este tutorial te haya ayudado a entender mejor el comando ping de Linux. Si tienes preguntas o sugerencias, por favor deja un mensaje en la sección de comentarios.