Странное безточное десятичное обозначение IP-адреса ... Как это работает?

6588
beeks

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

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

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

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

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

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

88
См. Http://www.pc-help.org/obscure.htm. Shamtam 10 лет назад 4
@Shamtam, да, я был там, и используя расчеты на этом сайте, чтобы скрыть IPV4-адрес, я получаю НАМНОГО меньшее число. Ни один из вычислений, которые я попробовал, не приведет к тому, что я наткнулся на число, которое правильно разрешается в браузере. beeks 10 лет назад 0
Вы действительно уверены, что это не IPv6-адрес? Потому что это число разбивается на 8 цифр в базе 65536; Адреса IPv6 имеют 8 цифр в базе 65536. Представлены в шестнадцатеричном виде, как обычно для IPv6, это 89: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0. Christian 10 лет назад 2
@Christian Его объяснение источника числа jives с показанным фактическим номером, который имеет 36 цифр (каждый идентификатор - 9 цифр или 714xxxxxx или 715xxxxxx). Компьютер даже не имеет IPv6, а число, принятое в качестве адреса IPv4, действительно возвращает веб-страницу. Числа от ~ 5E33 до ~ 3E38 имеют 8 цифр в базе 65536, я думаю, что это просто совпадение, что он попадает в этот диапазон (плюс, любое меньшее число также будет действительным адресом IPv6) Tim S. 10 лет назад 2
@TimS. Ну, рассчитанный IP peanut_butter не возвращает мне пинг и не возвращает веб-сайт. Но тогда и это огромное количество ничего не возвращает для меня. Я думаю, что это поможет запустить wireshark, позволяя firefox делать свое дело и, по крайней мере, посмотреть, к какому IP он на самом деле подключается. Christian 10 лет назад 0
@Christian, он больше не возвращает мне пинг или страницу. Страница, которая возвращалась, была на самом деле маршрутизатором в Корее, который не был защищен и имел логин / пароль по умолчанию «ADMIN / ADMIN». Учитывая количество обращений к этому вопросу, я не сомневаюсь, что кто-то сделал что-то гнусное, чтобы перевести его в автономный режим. beeks 10 лет назад 0
@beeks Хорошо, это уже не работало, когда я попробовал это вчера, но учитывая, что это был незащищенный маршрутизатор, возможно, это не так удивительно. Так вы говорите, что в своей адресной строке вы в основном поместили случайное число? Или какая у вас там электронная таблица со странно закодированными IP-адресами незащищенных маршрутизаторов? ;) Christian 10 лет назад 1
@ Кристиан, LOL. Это были уникальные идентификаторы сообщений в системе соответствия. Совершенно невероятный шанс, что я вставил их в адресную строку, и это сработало. Могу поспорить, что это никогда не повторится со мной в моей жизни :) beeks 10 лет назад 1
Смотрите также https://bugzilla.mozilla.org/show_bug.cgi?id=67730 Jason C 10 лет назад 1
Кажется, это работает для меня прямо сейчас. Я получаю страницу маршрутизатора, выглядящую [как это] (http://i.imgur.com/yHv9NYP.jpg). eis 10 лет назад 0
@eis А вы проверили, к какому IP подключен ваш браузер в wireshark или iftop, или как? Christian 10 лет назад 1
Нет, извините, как-то пропустил этот комментарий. Нужно постараться не забыть сделать это в другой раз (хост, кажется, сейчас не в сети) Но на скриншоте показан рассчитанный ip peanut_butter. eis 10 лет назад 0
Смотрите также http://superuser.com/questions/486788/why-does-pinging-192-168-072-only-2-dots-return-a-response-from-192-168-0-58 jiggunjer 9 лет назад 0

1 ответ на вопрос

93
peanut_butter

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

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

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

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

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

Хороший ответ. Также может быть полезно упомянуть, что каждый раздел адреса IPv4 с точками называется * октетом *, потому что это десятичное представление 8-битного двоичного числа (4 октета = 4 x 8 бит = 32 бита адреса IPv4) и что десятичная версия действительно только для нашей выгоды. chritohnide 10 лет назад 12
Хороший ответ! Я думаю, что это может быть более подробно описано в «почему» и «как», но это все еще полный ответ. +1 Raystafarian 10 лет назад 1
Потрясающие. Я бы никогда не подумал попробовать базу на 256. Слава! beeks 10 лет назад 0
@beeks: На самом деле, вы можете думать о «стандартном» способе записи адреса IPv4 как о записи 32-битного числа в base-256. Jörg W Mittag 10 лет назад 0
Вы уверены, что это не десятичная запись IPv6? Он успешно преобразуется в `0089: a4d2: 471b: 45ef: 77ed: c70f: da35: 93f0` Izkata 10 лет назад 4
@Izkata Вы совершенно правы. Последние 32 бита адреса IPv6 являются общедоступным адресом IPv4 клиента. peanut_butter 10 лет назад 1
@peanut_butter Можете ли вы уточнить это как часть последнего абзаца? Я никогда не слышал этого раньше Izkata 10 лет назад 0
@Izkata: маловероятно, поскольку этот адрес будет находиться в нераспределенной и зарезервированной части адресного пространства IPv6. Henning Makholm 10 лет назад 5
@Izkata Посмотрите на раздел 4 (Адреса Teredo) http://www.rfc-editor.org/rfc/rfc4380.txt peanut_butter 10 лет назад 0
Страница руководства [inet_aton] (http://linux.die.net/man/3/inet_aton) объясняет 4 формата адресов IPv4. mniip 10 лет назад 0
@ Кристиан, это на самом деле вполне правдоподобное объяснение. Например, 74.125.224.72 - это IP-адрес для google.com. Если я введу десятичный эквивалент 1249763400 в Firefox, он отправит запрос на правильный IP-адрес, 74.125.224.72, с заголовком «Host» 1249763400. Если я добавлю к этому кратное 2 ^ 32 (5313657853246575461916744 == 1249763400 мод 2 ^ 32), он * по-прежнему * отправляет запрос на правильный IP-адрес, за исключением заголовка «Host» большего числа «5313657853246575461916744». Google решает, что более короткое представление IP допустимо (302 найдено), а большее - нет (404; но оно отвечает!). Tim S. 10 лет назад 1
Число (в ASCII), вероятно, будет просто пропущено через одну из строки C stdlib в функции int для преобразования в 32-битный адрес ipv4. В большинстве реализаций C stdlib эти преобразования будут автоматически выполняться по модулю 2 ^, Результат в этом случае точно соответствует наблюдаемому поведению. Tonny 10 лет назад 3
Стоит отметить, что это, вероятно, причуды анализатора URL Firefox. Кажется, он признает, что это число, а не URL-адрес, и пытается проанализировать его как 32-битный не усеянный IP-адрес (результирующее проанализированное целое число заканчивается по модулю 32-битного, и на самом деле он не выполняет никакой проверки ошибок на входе ). Chrome, например, не показывает такое поведение. На самом деле, возможно, стоит сообщить об этом как о тривиальной ошибке в Firefox. Jason C 10 лет назад 3
На самом деле: [Запрос игнорировать эти и другие типы адресов в Firefox] (https://bugzilla.mozilla.org/show_bug.cgi?id=67730) уже был подан несколько лет назад, но, похоже, так и не был придержи. Jason C 10 лет назад 3