4

Это вызвало у друга некоторую головную боль при настройке коммутируемого интернет-соединения с IP-адресами с добавлением нуля в конфигурационном документе, например так:

192.168.019.254

Независимо от того, как он пытался настроить сетевой стек Mac, он просто не работал. Но графический интерфейс также не жаловался на ошибки.

Позже я обнаружил, что пинг этих дополняемых нулями адресов в терминале показал "не удается разрешить", в то время как пинг одного и того же адреса без дополняемых нулей (192.168.19.254 против 192.168.019.254) показал "неспособность достичь", что дало много света этой мистерии. , Удаление бесполезных нулей заставило все работать.

Это ошибка или особенность? Я никогда раньше не сталкивался с таким странным поведением - независимо от того, использую ли я GUI или CLI для настройки или тестирования IP-содержимого.

1 ответ1

10

Перевод строки в адрес обычно выполняется функцией POSIX getaddrinfo(). Эта функция сначала проверяет числовой IP-адрес с помощью inet_addr(), а в случае неудачи пытается разрешить строку как имя домена. inet_addr() интерпретирует числа с начальным 0 как восьмеричное, поэтому, например, 010 станет 8 , а 019 будет ошибкой (и, следовательно, будет разрешено как доменное имя). То же самое происходит в Linux и Solaris.

От getaddrinfo():

Если указанным семейством адресов является AF_INET или AF_UNSPEC, строки адреса с использованием стандартной точечной нотации в Интернете, как указано в inet_addr() , действительны.

Из inet_addr():

Все числа, представленные в виде частей в десятичной нотации IPv4 с точками, могут быть десятичными, восьмеричными или шестнадцатеричными, как указано в стандарте ISO C (то есть, ведущий 0x или 0X подразумевает шестнадцатеричное; в противном случае начальный '0' подразумевает восьмеричное; в противном случае, число интерпретируется как десятичное).

Обратите внимание на адрес 192.168.8.254 в скобках:

$ ping 192.168.010.254
PING 192.168.010.254 (192.168.8.254): 56 data bytes
Request timeout for icmp_seq 0

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