Extraña notación decimal sin punto de la dirección IP ... ¿Cómo funciona?

89

Hoy temprano pensé que tenía una URL en mi portapapeles, pero en realidad tenía cuatro enteros de 9 dígitos copiados de una hoja de cálculo, que eran números de identificación de un sistema propietario. Completamente no relacionado con la tarea en cuestión. Lo pegué en Firefox y me sorprendió descubrir que realmente cargaba una página. He visto anotaciones decimales sin punto de direcciones IPv4 antes, pero este número largo es algo mucho, mucho más grande.

714687644714805209715128610715964400 (pegar un HTTP: // en frente)

¿Como funciona esto? Todos los convertidores decimales -> IPv4 que he encontrado en Internet lo consideran una entrada no válida. Si tomo la dirección IPv4 que realmente carga y realizo los mismos cálculos para convertirla a decimal sin punto, obtengo un número mucho menor.

He leído que ping puede aceptar dwords y hacer algunas conversiones, pero no puede convertir este número a una dirección IP. IPv6 está fuera de discusión ya que este host no tiene conectividad IPv6.

¿Qué clase de locura es esta? Me sorprendí a mí y a mis compañeros de trabajo.

Editar: está de vuelta en línea ahora.

pitidos
fuente
44
Ver pc-help.org/obscure.htm
Shamtam
2
¿Estás realmente seguro de que no es una dirección IPv6? Debido a que este número se divide en 8 dígitos en la base 65536; Las direcciones IPv6 tienen 8 dígitos en la base 65536. Representado en hexadecimal como es habitual para IPv6, es 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0.
Christian
2
@ Christian Su explicación de la fuente del número coincide con el número real que se muestra, que tiene 36 dígitos (cada ID es de 9 dígitos, ya sea 714xxxxxx o 715xxxxxx). La computadora ni siquiera tiene IPv6, y el número tomado como una dirección IPv4 de hecho devuelve una página web. Los números de ~ 5E33 a ~ 3E38 tienen 8 dígitos en la base 65536, creo que es solo una coincidencia que su caída se encuentre en ese rango (además, cualquier número más pequeño también sería una dirección IPv6 válida)
Tim S.
1
@beeks Ok, ya no funcionaba cuando lo probé ayer, pero dado que era un enrutador no seguro, tal vez eso no sea tan sorprendente. Entonces, ¿estás diciendo que básicamente pones un número aleatorio en tu barra de direcciones? ¿O qué tipo de hoja de cálculo tenía allí que contiene direcciones IP extrañamente codificadas de enrutadores no seguros? ;)
Christian el
1
@ Christian, LOL. Eran algunos identificadores de mensajes únicos en un sistema de cumplimiento. Totalmente extraño que los pegue en la barra de direcciones, y funcionó. Apuesto a que eso nunca me volverá a pasar en mi vida :)
suena el

Respuestas:

93

Esta es una pregunta bastante interesante, y me tomó un tiempo descubrirlo. La respuesta corta es que los últimos 32 bits del número son 3660944368 (en decimal, que se puede encontrar por 714687644714805209715128610715964400 mod 2^32)

Este es el valor decimal de la dirección IPv4 218.53.147.240 , que se puede encontrar convirtiéndolo en base-256 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240análogamente a escribir un número en decimal (base-10). Por ejemplo 234 = 2*10^2+ 3*10 + 4.

Como señala @chritohnide, cada sección de direcciones IPv4 punteadas se denomina octeto, ya que representa 8 dígitos binarios. También vale la pena señalar que los diversos formatos de direcciones IPv4 (como el decimal punteado o el decimal puro) son solo diferentes formas de representar el número binario de 32 bits para obtener un beneficio adicional.

Como las direcciones IPv4 son números de 32 bits, solo se usan los últimos 32 bits del número para resolver la dirección. Por qué esto es cierto no es tan obvio. Como otros han señalado, el número completo se ve sorprendentemente similar a una dirección IPv6 en decimal, pero no es una dirección válida.

Mirando la especificación de Teredo (ver 4. Direcciones de Teredo ), el Cliente IPv4 ocupa los últimos 32 bits de la dirección IPv6, pero el prefijo del número no coincide con la especificación de Teredo (También vea wikipedia ).

mantequilla de maní
fuente
12
Buena respuesta. También podría ser útil mencionar que cada sección de una dirección IPv4 punteada se llama octeto porque es la representación decimal de un número binario de 8 bits (4 octetos = 4 x 8 bits = 32 bits de dirección IPv4) y que el decimal La versión es realmente solo para nuestro beneficio.
chritohnide
44
¿Seguro que no es notación decimal IPv6? Se convierte con éxito a0089:a4d2:471b:45ef:77ed:c70f:da35:93f0
Izkata
55
@Izkata: poco probable porque esa dirección estaría en una parte reservada y no asignada del espacio de direcciones IPv6.
Henning Makholm
3
El número (en ASCII) probablemente solo se ejecutará a través de una de las cadenas C stdlib a funciones int para convertir en la dirección ipv4 de 32 bits. En la mayoría de las implementaciones de C stdlib, esas conversiones realizarán automáticamente un módulo 2 ^ <tamaño entero deseado>. El resultado en ese caso es exactamente el comportamiento observado.
Tonny
3
Vale la pena señalar que esto es probablemente una peculiaridad del analizador de URL de Firefox. Parece reconocer que es un número en lugar de una URL e intenta analizarlo como una dirección IP no asignada de 32 bits (el entero analizado resultante termina en un módulo de 32 bits y realmente no hace ninguna comprobación de error en la entrada ) Chrome, por ejemplo, no muestra este comportamiento. En realidad, podría valer la pena informarlo como un error trivial en Firefox.
Jason C