Ping es una herramienta de línea de comandos que se puede encontrar en prácticamente cualquier sistema operativo con conectividad de red, y sirve como una prueba para ver si se puede acceder a un dispositivo a través de la red.
El comando Ping envía una solicitud a un dispositivo específico. Si tiene éxito, muestra la respuesta que el equipo de destino devuelve al de origen.
¿Qué significa “ping”?
Según el autor, el nombre de “ping” proviene de la terminología del sonar. En un sonar, un ping es una onda de sonido audible que se envía para encontrar un objeto. Al golpear contra el objeto, se reflejan las ondas de sonido, o eco, de vuelta a la fuente. En ese momento, se pueden determinar la distancia y la ubicación del objeto midiendo el tiempo y la dirección de la onda de sonido de retorno.
De forma similar, el comando ping envía una solicitud de eco. Si dicha solicitud encuentra el sistema de destino, el equipo remoto envía una respuesta de eco. A partir de la respuesta se puede determinar la distancia (número de saltos) al sistema remoto, así como las condiciones intermedias (pérdida de paquetes y tiempo de respuesta). A pesar de que el autor de la herramienta dijo que el nombre proviene del sonido del sonar, otros expertos insisten en que “PING” es un acrónimo de Packet InterNet Groper.
La herramienta Ping utiliza la solicitud de eco y los mensajes de respuesta que genera dentro del protocolo de mensajes de control de internet (ICMP), una parte integral de cualquier red IP. Cuando se emite un comando ping, se envía un paquete de solicitud de eco a la dirección indicada. Cuando el host remoto recibe la solicitud de eco, responde con un paquete de respuesta de eco.
Por defecto, el comando ping envía varias solicitudes de eco, generalmente cuatro o cinco, y presenta al usuario el resultado de cada una de ellas, explicando si la solicitud recibió una respuesta exitosa, cuántos bytes se recibieron en respuesta, el tiempo de vida (TTL) y el tiempo que se tardó en recibir la respuesta, junto con otras estadísticas sobre la pérdida de paquetes y los tiempos de ida y vuelta.
La solicitud de eco (“ping”) está estructurada de la siguiente manera:
Byte 0 | Byte 1 | Byte 2 | Byte 3 |
Type (8 = IPv4, ICMP; 128 = IPv6, ICMP6) | Code | Header Checksum | |
Identifier | Sequence Number | ||
Payload |
La respuesta de eco debe incluir la carga útil exacta recibida en la solicitud:
Byte 0 | Byte 1 | Byte 2 | Byte 3 |
Type (0 = IPv4, ICMP; 129 = IPv6, ICMP6) | Code | Header Checksum | |
Identifier | Sequence Number | ||
Payload |
La herramienta Ping se ha incorporado en prácticamente todos los sistemas operativos con soporte de red. A pesar de que la solicitud y la respuesta de eco son mensajes ICMP, la implementación concreta de la herramienta Ping varía ligeramente entre los fabricantes.
En su forma más sencilla, para ejecutar la herramienta Ping no hace falta nada más que el comando ping y una dirección de destino. El host remoto se puede especificar mediante su nombre o su dirección.
ping 168.93.37.2
ping ftp.microsoft.com
A continuación veremos el resultado de un simple ping al host de destino paessler.com:
ping paessler.com
Pinging paessler.com [104.16.182.252] with 32 bytes of data:
Reply from 104.16.182.252: bytes=32 time=4ms TTL=57
Reply from 104.16.182.252: bytes=32 time=4ms TTL=57
Reply from 104.16.182.252: bytes=32 time=4ms TTL=57
Reply from 104.16.182.252: bytes=32 time=4ms TTL=57
Ping statistics for 104.16.182.252:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 4ms, Maximum = 4ms, Average = 4ms
Sin embargo, la herramienta Ping también ofrece otras opciones personalizables.
Existen numerosos parámetros disponibles para el comando ping que permiten personalizar la configuración predeterminada para fines más específicos. Lamentablemente, entre diferentes plataformas no se mantiene ninguna coherencia con respecto a ellos. Por ejemplo, Windows usa -n (number) para establecer cuántos pings enviar, mientras que la mayoría de los sistemas Unix usan un -c (count).
Aquí mostramos algunos ejemplos de modificadores del comando Ping. En general, usar ping -? dará como resultado una lista de parámetros, junto con la letra correspondiente para emplear cada uno de ellos en el sistema operativo.
Number (or count) – establece el número de pings (solicitudes de eco) que se enviarán. Por defecto, este número es cuatro en la mayoría de los sistemas Windows y cinco en casi todos los sistemas Unix. Indicar un número mayor hace que el ping continúe ejecutándose. Por ejemplo, puede ser una forma de recopilar más datos para ver si el tiempo de respuesta varía, o una garantía de que un sistema sigue respondiendo.
Timeout – cambia el tiempo durante el cual la herramienta espera una respuesta del destino. En sistemas Windows, el valor predeterminado es 4000 milisegundos (4 segundos).
Size – cambia el tamaño del paquete de ping. El valor predeterminado en Windows es de 32 bytes, mientras que muchos sistemas Unix/Linux tienen un valor predeterminado de 64 bytes.
TTL – establece un TTL diferente.
IP4 or IP6 – responde con direcciones IPv4 o IPv6 (ping -4/ping -6 en Windows, ping o ping6 en Linux)
Until stopped – sigue ejecutando el ping hasta que el usuario lo detenga (-t en Windows).
Sintaxis del comando ping para Windows
-t | Hace ping al host especificado hasta que se detiene. Para detener, pulse Control-C |
-a | Resolver direcciones de nombres de host |
-n | Número de solicitudes de eco para enviar. |
-l | Enviar tamaño del búfer |
-f | Establecer el indicador Don't Fragmet flag (no fragmentar) en el paquete (solo IPv4) |
-i | Establecer el indicador Time To Live (tiempo de vida). |
-v | Establecer el indicador Type of Service (tipo de servicio, pero ya no se usa) |
-r | Registrar ruta para el recuento de saltos (solo IPv4) |
-s | Marca de tiempo para el recuento de saltos (solo IPv4) |
-j | Ruta de origen imprecisa a lo largo de la lista de hosts (solo IPv4) |
-k | Ruta de origen estricta a lo largo de la lista de hosts (solo IPv4) |
-w | Tiempo de espera en milisegundos para esperar cada respuesta |
-R | Usar un encabezado de enrutamiento para probar también la ruta inversa (solo IPv6, en desuso según RFC 5095) |
-S | Dirección de origen a usar |
-c | Identificador del compartimento de enrutamiento |
-p | Hacer ping a una dirección de proveedor de virtualización de red de Hyper-V |
-4 | Forzar el uso de IPv4 |
-6 | Forzar el uso de IPv6 |
El comando ping, a pesar de ser una herramienta tan pequeña y básica, puede resultar tremendamente valiosa en diversas situaciones. Puesto que se basa en la línea de comandos, ping se puede usar con facilidad en diversos tipos de scripts, lo que permite ejecutar y registrar múltiples pings con diferentes objetivos. Por ejemplo, la salida del comando ping se puede canalizar fácilmente a un archivo de texto para su posterior revisión.
Solucionar problemas con Ping
Quizás el uso más común de la herramienta Ping sea la resolución de problemas. Al tratar de usar aplicaciones o sistemas a través de una red, lo más importante es saber si realmente funciona la conexión, y esto se puede averiguar con la ayuda de una serie de comandos ping.
Una comprobación rápida del ping a una dirección IP confirmará que el sistema de destino está encendido, que hay una conexión y que ambas máquinas pueden comunicarse entre sí.
Ping 172.168.9.13
Si el ping da una respuesta exitosa tanto por nombre como por dirección IP, pero los tiempos de respuesta son largos, puede haber un problema de enrutamiento, velocidad de red o congestión en la misma. Incluso los pings fallidos pueden proporcionar una información muy valiosa a la hora de determinar un problema.
Si un ping por dirección IP tiene éxito, pero falla por nombre, entonces hay un problema de resolución de nombres. Si el ping falla por completo, hacer ping a otras partes de la red podría permitir aislar el problema. Un ping exitoso a la puerta de enlace predeterminada confirma que la conexión de red está funcionando, pero que algo interfiere con un sistema remoto en concreto.
Si se puede hacer ping con éxito dentro de la misma subred del sistema remoto, pero no al sistema de destino exactamente, entonces lo que probablemente falle sea la conectividad de red del host remoto. Si no se puede hacer ping a la puerta de enlace predeterminada, pero sí a la dirección de loopback (127.0.0.1), podremos deducir que la interfaz de red funciona, pero no hay conexión a la red.
Error de ping
Si, al hacer ping, no se recibe respuesta del host de destino, la mayoría de las implementaciones de ping no muestran nada o, como mucho, una notificación de timeout. Este podría ser un resultado:
Pinging 121.242.124.9 with 32 bytes of data:
Request timed out.
Request timed out.
Request timed out.
Request timed out.
Descubrimiento
Ping se puede utilizar como una herramienta de descubrimiento en plan rápido. Dado que prácticamente cualquier dispositivo conectado a la red responderá a un ping, hacer ping a un rango de direcciones puede permitir a un administrador encontrar todos los dispositivos conectados en dicho rango, independientemente del tipo de dispositivo o sistema operativo del que se trate.
Supervisión
Ping se puede usar para supervisar que todos los dispositivos dispongan de red. Ejecutar un comando ping en forma de tarea programada puede servir a modo de sondeo rudimentario de cualquier ordenador o dispositivo en la red sin la necesidad de instalar agentes de software adicionales ni abrir más puertos. Una supervisión básica se puede conseguir ejecutando un ping con la opción ‘run until stopped’. Cuando los pings comienzan a fallar, hay un problema incipiente.
Obviamente, estas soluciones se benefician enormemente de lo que aporta una herramienta de supervisión como PRTG puesto que, aunque sí que es cierto que utiliza comandos de ping de forma subyacente, no necesita que nadie esté mirando la salida o canalizándola a algún tipo de registro.
El sensor Ping v2 estándar lanza comandos ping en segundo plano que se pueden configurar para ejecutarse a intervalos específicos o en respuesta a otros eventos, por ejemplo: si un sensor informa de un fallo de conexión, un ping puede determinar si todavía existe conexión de red, o también se puede configurar la supervisión para alertar a un administrador si los tiempos de ping son demasiado largos o si se produce una pérdida de paquetes anormal.
Otro interesante sensor basado en Ping es el sensor Nube ping v2, que hace ping a los sistemas supervisados desde una nube remota de sistemas distribuidos. Gracias a ello, conseguimos detectar ese problema mayúsculo y, a la vez, tan difícil de detectar, que es cuando todo funciona bien en un extremo pero, por la razón que sea, los usuarios o clientes remotos no pueden acceder a esos sistemas desde el exterior.
Simplemente saber que un sistema existe y que está conectado a la red puede ser suficiente información para que un atacante pase a la acción. Un análisis meticuloso de las respuestas que se obtienen a un ping puede aportar información adicional, como el sistema operativo que se ejecuta en el destino, la ubicación de la máquina, etc.
Muchas herramientas de hacking se aprovechan de la técnica de “walking the range” (recorrer el rango), haciendo ping a cada dirección IP de una red específica para obtener una lista de los sistemas que responden y, por ende, a los que se puede acceder. Como resultado, muchos cortafuegos están configurados para bloquear solicitudes de ping que provienen de redes no fiables.