http://8 -> http://0.0.0.8 это стандартное соглашение? - PullRequest
0 голосов
/ 12 октября 2018

Сегодня я узнал, что команда:

php -S 0:8888

запускает сервер на локальном хосте так же, как:

php -S 0.0.0.0:8888

А также, перемещая Safari к:

http://8

будет перенаправлять на:

http://0.0.0.8

Кроме того, я обнаружил, что Safari будет перенаправлять http://1.2 и http://1.2.3 другими способами.


Существует ли какой-либо документированный стандарт или соглашение, объясняющее это, или я нашел похожее пасхальное яйцо в двух разных программах?

Ответы [ 2 ]

0 голосов
/ 13 октября 2018

IPv4-адрес - это 32-разрядное целое число без знака.Пунктирная побайтная нотация - это просто более понятный для человека вариант - очень часто вы можете использовать обе записи взаимозаменяемо:

ping 8.8.8.8
ping ‭134744072‬
0 голосов
/ 12 октября 2018

Не официальный, но проект RFC довольно близок.Он не определяет это поведение, но упоминает и узаконивает его.

Между тем, очень популярная реализация IP-сетей пошла своим путем.4.2BSD представил функцию inet_aton (), задачей которой было интерпретировать символьные строки как IP-адреса.Он интерпретировал оба синтаксиса, упомянутых в [MTP] (см. Выше): одно число, дающее полный 32-битный адрес, и значения октетов, разделенных точками.Он также интерпретировал два промежуточных синтаксиса: октет-точка-октет-точка-16 битов, предназначенных для адресов класса В, и октет-точка-24 битов, предназначенных для адресов класса А.Это также дало некоторую гибкость в том, как указывались отдельные числовые части: оно допускало восьмеричное и шестнадцатеричное в дополнение к десятичному, различая эти радиусы с помощью синтаксиса языка C, включающего префикс «0» или «0x», и позволяло числам бытьпроизвольно длинный.

4.2BSD inet_aton () широко копируется и имитируется, и поэтому является стандартом де-факто для текстового представления адресов IPv4.Тем не менее, эти альтернативные синтаксисы теперь вышли из употребления (если они когда-либо имели значительное использование).Единственное практическое использование, которое они теперь видят, предназначено для преднамеренного запутывания адресов: предоставление адреса IPv4 в виде одного 32-разрядного десятичного числа является предпочтительным среди людей, желающих скрыть истинное местоположение, закодированное в URL.Все формы, за исключением десятичных октетов, рассматриваются как нестандартные (несмотря на то, что они достаточно широко совместимы) и нежелательные.

https://tools.ietf.org/html/draft-main-ipaddr-text-rep-02


И мы можем видеть этокод до сих пор живет:

одно число, дающее полный 32-битный адрес

❱ ping 2321319336
PING 2321319336 (138.92.133.168): 56 data bytes
...

октет-точка-октет-точка-16 бит, предназначенный для адресов класса B

❱ ping 172.16.2342
PING 172.16.2342 (172.16.9.38): 56 data bytes
....

октет-точка-24 бит, предназначенный для адресов класса A

❱ ping 10.45253
PING 10.45253 (10.0.176.197): 56 data bytes
...

Обратите внимание, что RFC 3896 явно определяет IP-адрес в URI как десятичное представление с точками и четырьмя точками, поэтому с технической точки зрения эти сочетания клавиш вообще не допускаются в URI!

...