88

Ранее сегодня я думал, что у меня есть URL в буфере обмена, но на самом деле у меня было четыре 9-значных целых числа, скопированных из электронной таблицы, которые были идентификационными номерами из проприетарной системы. Полностью не связано с поставленной задачей. Я вставил его в Firefox и с удивлением обнаружил, что он действительно загрузил страницу. До этого я видел десятичные записи адресов IPv4 без точек, но это длинное число намного больше.

714687644714805209715128610715964400 (вставьте HTTP:// впереди)

Как это работает? Все десятичные -> IPv4-конвертеры, которые я нашел в Интернете, считают это неверным вводом. Если я возьму адрес IPv4, который он на самом деле загружает, и выполню те же вычисления, чтобы преобразовать его в десятичную точку без точек, я получу значительно меньшее число.

Я читал, что ping может принимать слова и выполнять некоторые преобразования, но он не может преобразовать это число в IP-адрес. Об IPv6 не может быть и речи, так как у этого хоста нет подключения к IPv6.

Что это за безумие? Это поставило меня в тупик и моих коллег.

Изменить: он вернулся онлайн сейчас.

1 ответ1

93

Это довольно интересный вопрос, и мне понадобилось немного времени, чтобы разобраться. Краткий ответ: последние 32 бита числа 3660944368 (в десятичном виде, который можно найти по 714687644714805209715128610715964400 mod 2^32)

Это десятичное значение адреса IPv4 218.53.147.240, которое можно найти, преобразовав его в base-256 3660944368 = 218*(256^3)+53*(256^2)+147*(256)+240 аналогично выписать число в десятичном виде (основание-10). Например, 234 = 2*10^2+ 3*10 + 4 .

Как указывает @chritohnide, каждый раздел адресов IPv4 с точками называется октетом, поскольку он представляет 8 двоичных цифр. Стоит также отметить, что различные форматы адресов IPv4 (такие как десятичная точка с точками или чисто десятичное число) - это просто разные способы представления 32-разрядного двоичного числа для нашей выгоды.

Поскольку адреса IPv4 являются 32-разрядными числами, для разрешения адреса используются только последние 32-разрядные числа. Почему это правда, не так очевидно. Как уже отмечали другие, полное число выглядит поразительно похожим на IPv6-адрес в десятичном виде, но не является действительным адресом.

Глядя на спецификацию Teredo (см. 4.Адреса Teredo), клиентский IPv4 занимает последние 32 бита адреса IPv6, но префикс номера не соответствует спецификации Teredo (также см. Википедию).

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .