Todo el mundo lo complica demasiado con RFC, clases de IP y demás. Simplemente ejecute algunas pruebas para ver cómo el ping
comando analiza la entrada de IP por parte del usuario (se eliminó el desperdicio extraño):
> ping 1
Pinging 0.0.0.1 with 32 bytes of data:
> ping 1.2
Pinging 1.0.0.2 with 32 bytes of data:
> ping 1.2.3
Pinging 1.2.0.3 with 32 bytes of data:
> ping 1.2.3.4
Pinging 1.2.3.4 with 32 bytes of data:
> ping 1.2.3.4.5
Ping request could not find host 1.2.3.4.5. Please check the name and try again.
> ping 255
Pinging 0.0.0.255 with 32 bytes of data:
> ping 256
Pinging 0.0.1.0 with 32 bytes of data:
Como puede ver, el ping
comando (en Windows) le permite usar diferentes formatos de dirección IP. Una dirección IPv4 se puede dividir en cuatro partes ("dotted-quad") de esta manera: A.B.C.D
y el ping
comando le permite omitir algunas, completando un valor predeterminado de la 0
siguiente manera:
1 part (ping A) : 0.0.0.A
2 parts (ping A.B) : A.0.0.B
3 parts (ping A.B.C) : A.B.0.C
4 parts (ping A.B.C.D) : A.B.C.D
Si solo suministra una sola parte, entonces si está por debajo de 255 (el máximo para un octeto), se trata como un octeto como arriba, pero si es mayor que 255, entonces se convierte y se pasa al siguiente campo (es decir, mod 256
).
Hay unos pocos casos extremos como proporcionar más de cuatro partes no parecen funcionar (por ejemplo, ping google.com
's IP no funcionará para cualquiera 0.74.125.226.4
o 74.125.226.4.0
).
También puede usar la notación hexadecimal en forma cuadriculada y plana, pero debe formatearla antes de 0x
cada octeto.
Por lo tanto, hay muchas formas de representar una dirección IP (IPv4). Puede usar el formato plano o punteado cuádruple (o punteado triple, punteado doble o incluso punteado simple), y para cada uno, puede usar (o incluso mezclar y combinar) decimal, octal y hexadecimal. Por ejemplo, puede hacer ping google.com
de las siguientes maneras:
google.com
(nombre de dominio)
74.125.226.4
(decimal punteado)
1249763844
(decimal plano)
0112.0175.0342.0004
(octal punteado)
011237361004
(octal plano)
0x4A.0x7D.0xE2.0x04
(hexágono punteado)
0x4A7DE204
(hexágono plano)
74.0175.0xe2.4
(ಠ_ಠ)
(¡Gracias a Dios que no se agregó soporte de notación binaria!)
Aplicación :
En su caso, el ping 192.168.072
utiliza el tercer formato en la tabla anterior ( A.B.0.C
), por lo que realmente está haciendo ping 192.168.0.072
. Además, debido a que tiene un cero inicial en la última parte, se trata como octal, que en decimal es 58.
Misterio resuelto.
Tenga en cuenta que, si bien el ping
comando de Windows permite una variedad tan amplia de formatos para la entrada e interpreta formatos no estándar de la manera que se ve, eso no significa necesariamente que pueda usar dichos formatos en todas partes. Algunos programas pueden obligarlo a proporcionar las cuatro partes de un quad con puntos, otros pueden no permitir mezclar y combinar decimales y octales, y así sucesivamente.
Además, las direcciones IPv6 complican aún más la lógica de análisis y la aceptabilidad del formato de entrada.
Anexo :
syss señaló que si usa un carácter no válido en uno de los números (por ejemplo, an 8
o 9
cuando usa octal, a g
en modo hexadecimal, etc.) ping
es lo suficientemente inteligente como para reconocerlo e interpretarlo como una cadena (-al? -ic?) URL en lugar de como una dirección IP numérica.
(Como alguien que ha tenido numerosos aneurismas y ataques cardíacos tratando de escribir un código supuestamente "simple" para acomodar el número exponencialmente explosivo de permutaciones de valores de datos, aprecio que, al parecer, procesa correctamente todas las variaciones de entrada; en esto caso, al menos 3 1 +3 2 +3 3 +3 4 = 120 variaciones.)
Por lo tanto, mientras que la especificación 010.020.030.040
hará ping 8.16.24.32
como se esperaba, pasar 010.020.030.080
a ping
se tratará como una URL en lugar de una dirección IP, como la foo.bar.baz.com
que podría (pero lamentablemente no existe). En otras palabras, intenta hacer ping al subdominio 010
en el subdominio 020
en el dominio 030
en el dominio de nivel superior 080
. Sin embargo, dado 080
que no es un TLD válido (como .com
, .net
y sus amigos), la conexión falla en el primer paso.
Lo mismo sucede 090.010.010.010
cuando el carácter no válido está en un octeto diferente. Del mismo modo, 0xf.0xf.0xf.0xf
pings 15.15.15.15
, pero 0xh1.0x1.0xg0.0f
falla.
Bueno, supongo que eso es lo que obtienes por no ser fluido en múltiples bases numéricas.
Probablemente sea más fácil y seguro asegurarse de usar siempre direcciones de 4 puntos con cuatro puntos ("40q"? "Cuádruple-cuádruple"?
Así que ve y aprende algunas bases numéricas . Podrá presumir y ser la vida de las fiestas, y como dicen, hay 10 tipos de personas: los que saben binario y los que no.
Ni siquiera pensemos en las direcciones IPv6; ¡Creo que son uno de los 111 sellos!