¿Por qué funciona "ping X", donde "X" es un número entero arbitrario?

¿Por qué funciona "ping X", donde "X" es un número entero arbitrario?

Entonces, descubrí una extraña peculiaridad de la utilidad ping de Windows 10. Si hace ping a un número entero en lugar de a una dirección IP, "convertirá" ese número en una dirección IPv4. La conversión es tal que el primer octeto es el lugar 256^3, el segundo octeto es 256^2, el tercero es 256^1 y el último octeto es el lugar de las "unidades" o 256^0.

Por ejemplo, "ping 200" hará ping a 0.0.0.200, pero "ping 400" hará ping a 0.0.1.144, donde el "1" en el tercer octeto representa 256 (256 + 144 = 400).

Una búsqueda rápida en Google (aunque no se me ocurrió ningún término de búsqueda excelente) no arrojó nada.

Mis únicas dos teorías son estas:

  1. Puede darse el caso de que en una iteración anterior del esquema IP (es decir, las v1, v2 o v3 no utilizadas), el plan fuera utilizar únicamente números enteros únicos. Microsoft, en su obsesión por la compatibilidad con versiones anteriores, escribió un algoritmo de traducción en la utilidad ping para manejarlo de esta manera cuando se codificó ping por primera vez.
  2. Puede darse el caso de que, debido a la forma en que está codificada la utilidad ping, normalmente tome una dirección IPv4 válida y la traduzca a un único número entero antes de hacer algo con esos datos. Por lo tanto, como verificación del código, si ve que el usuario ingresó un único número entero, simplemente se salta el paso de traducción inicial.

¿Algunas ideas? Definitivamente intrigó a mis compañeros de trabajo, pero no tenían ni idea como yo.

EDITAR: Acabo de probarlo en mi máquina Arch Linux y puedo confirmar que el comportamiento también existe allí, por lo que probablemente desacredite mi primera teoría.

Respuesta1

La respuesta está documentada enWikipedia:

Otras representaciones de direcciones eran de uso común cuando se practicaba la creación de redes con clase. Por ejemplo, la dirección de loopback 127.0.0.1 se escribe comúnmente como 127.1, dado que pertenece a una red de clase A con ocho bits para la máscara de red y 24 bits para el número de host. Cuando se especifican menos de cuatro números en la dirección en notación de puntos, el último valor se trata como un número entero de tantos bytes como sean necesarios para completar la dirección hasta cuatro octetos. Así, la dirección 127.65530 equivale a 127.0.255.250.

Respuesta2

No es una peculiaridad. Es una característica.

Recuerde que la notación de puntos de una dirección IPv4 es simplemente una forma de representar el entero de cuatro bytes (es decir, 32 bits) que es una dirección IPv4 (y que va en el campo de destino de 32 bits en un paquete IP). Diferentes utilidades aceptarán diferentes formatos para este número entero.

Sé que en el pasado algunos navegadores aceptaban números enteros decimales como este como dirección en la barra de direcciones. (Me sorprendió que mis dos navegadores actuales, Firefox y Chrome, ya no hagan esto).

Respuesta3

".0" se puede omitir condicionalmente

A menudo se utiliza el comando "ping 127.0.0.1" para realizar una prueba de bucle en la máquina para verificar si el conjunto de protocolos TCP/IP de la máquina está instalado correctamente. ¿Pero lo encontraste? Se puede obtener el mismo resultado de la prueba utilizando el comando "ping 127.1". De hecho, los dos comandos "ping 127.1" y "ping 127.0.0.1" son iguales y ambos realizan pruebas de bucle.

¿Por qué esto es tan? Esta es la habilidad de usar la dirección IP en la aplicación del comando Ping. Todo el mundo sabe que la dirección IP se compone de 32 dígitos binarios. Para que sea más fácil de recordar para todos, cada 8 dígitos binarios se convierten en dígitos decimales. Por lo tanto, una dirección IP fácil de recordar que consta de dígitos decimales de cuatro partes (como 127.0.0.1). Dado que el sistema operativo Windows tiene la función de completar automáticamente ".0", puedo cambiar "127.0.0.1" a "127.1".

Sin embargo, la omisión de este ".0" está limitada condicionalmente y no puede omitirse arbitrariamente. En la aplicación del comando Ping, solo puede omitir uno o más ".0" que aparecen antes del último número decimal de la dirección IP, como reescribir el comando "ping 127.0.0.1" a "ping 127.1".

Si uno o más ".0" no están al lado de la última parte del número decimal, sino en otras posiciones, entonces este ".0" no se puede omitir, como "ping 202.0.96.1" no se puede escribir como "ping 202.96.1" "Esto se debe a que el resultado devuelto por "ping 202.96.1" es el mensaje de respuesta de "202.96.0.1" en lugar del mensaje de respuesta de "202.0.96.1".

Cadena numérica en lugar de dirección IP

En el comando Ping, también puedes usar una cadena numérica en lugar de una dirección IP. Ejecute el comando "ping 3658906394" y verá la información de retorno de la dirección IP "218.22.123.26".

¿Por qué esto es tan? De hecho, "3658906394" es otra representación de la dirección IP "218.22.123.26". Por supuesto, también puedes hacer ping a otras direcciones IP de la misma manera.

¿Cómo se convierte la cadena? De hecho, no es complicado. Tomando la dirección IP "218.22.123.26" como ejemplo, el método para convertir la dirección IP en una cadena numérica es el siguiente: primero convierta "218.22.123.26" a hexadecimal "DA.16.7B.1A" y luego elimínelo. . Después del punto decimal, se convierte en "DA167B1A" y, finalmente, el número hexadecimal se convierte al decimal "3658906394", luego "218.22.123.26" se convierte en "3658906394". Se utiliza el mismo método para convertir otras direcciones IP en cadenas numéricas.

Consejo: En algunos entornos LAN, el uso del comando "Ping+cadena de números" puede fallar y aparece el mensaje "Cadena de número de host desconocido". Esto se debe a que la cadena numérica se resuelve en un nombre de host en lugar de una dirección IP.

Respuesta4

Las direcciones IPv4 son enteros de 32 bits sin signo. En un intento equivocado de hacerlos más legibles para los humanos, tradicionalmente se muestran en la interfaz de usuario en notación "decimal con puntos", donde cada octeto (byte de 8 bits), comenzando por el más significativo, se representa como un número decimal, separado desde el siguiente octeto por un punto.

No es muy sorprendente que algunas UI le permitan ingresar cualquier cosa que puedan interpretar como UInt32 y usar el UInt32 resultante como la dirección IPv4 que deseaba.

información relacionada