Насколько широко распространена математика IP-технологий?
773
Niels Basjes
Если мы указываем адрес IPv4, мы все обычно делаем шаблон 1.2.3.4 Теперь, по сути, это всего лишь «способ» записи 32-битного числа в более удобочитаемой форме.
IP-адрес 1.2.3.4 также может быть записан как 1.2. (3 * 256 + 4) = 1.2.772
Это означает, что у вас может быть IP-адрес с 3 точками (то есть обычной практикой), 2 точками, 1 точкой и вообще без точек (то есть обычное 32-разрядное целое число без знака, записанное в виде десятичного целого числа).
Используя такую альтернативную нотацию, вы могли бы написать некоторые IP-адреса еще более удобочитаемыми: 10.10.4000 - это то же самое, что 10.10.15.160.
Одним из побочных эффектов является то, что если он используется в сочетании с веб-сервером, таким как apache, вы можете определить 4 разных vhosts на одном IP-адресе без использования файла DNS или хоста. (Попробуйте это дома;)
Я знаю, что есть много инструментов на основе графического интерфейса (например, Windows IP config), которые просто имеют 4 поля, которые принимают только 0-255. Многие инструменты командной строки (такие как ping, curl, ssh и т. Д.) И почти все веб-браузеры (которые в основном имеют адресную строку свободной формы) могут получить «любую» форму.
Теперь мой вопрос: насколько хорошо эти виды альтернативных нотаций IPv4 приняты / разрешены инструментами, которые мы имеем «в дикой природе», которые принимают любую форму?
Мне не нравится идея записи IP-адресов в целочисленных представлениях, кроме a.b.c.dформы, где каждое из 4 значений находится в диапазоне 0-255 (с другими ограничениями).
Другие обозначения просто приведут к неправильной интерпретации и появлению новых ошибок в природе. Я голосую за то, чтобы определить все инструменты и приложения, которые позволяют такие интерпретации, и исправить их.
Это работает из-за способа, которым работает функция inet_addr . Практически код каждого сетевого приложения использует это для преобразования IP-строк в их целочисленную форму и поддерживает нотации a, ab, abc и abcd.
Так что да, должно быть довольно безопасно предположить, что можно использовать все четыре из этих обозначений для IP-адреса.
Описание функции inet_addr фактически описывает наблюдаемое поведение как «по замыслу». Это то, что я хотел знать.
Niels Basjes 15 лет назад
0
Если вы наткнетесь на .NET-программу, которая читает IP-адрес, вы можете рассчитывать и на то, что она поддерживает десятичное представление. Большинство парсеров в языках программирования, которые я использовал, ведут себя одинаково.
К сожалению, довольно немногие из них используют RegEx, чтобы проверить, введен ли точечный синтаксис при попытке сделать это из пользовательского интерфейса. Таким образом, хотя они в состоянии разобрать его, они решили не делать этого.
Однако обратите внимание, что точечный синтаксис гораздо более читабелен и запоминаем, чем десятичное представление.