Этот вызвал друга некоторая головная боль при установке коммутируемого интернет-соединения, которое имело дополненные IP-адреса нуля в газете конфигурации как так:
192.168.019.254
Неважно, как он пытался настроить сетевой стек Mac, он просто не работал. Но GUI также не жаловался на ошибки.
Я позже узнал, что, проверяя с помощью ping-запросов эти дополненные адреса нуля в терминале показали "не могущий решить" при проверке с помощью ping-запросов того же адреса без заполненных нулей (192.168.19.254
по сравнению с. 192.168.019.254
) показал "не мог достигнуть", который принес много света в этот mysterium. Удаление бесполезных нулей заставило все работать.
Действительно ли это - ошибка или функция? Я никогда не испытывал такое странное поведение прежде - неважно, если я использую GUI или CLI, чтобы настроить или протестировать материал IP.
Перевод от строки до адреса обычно выполняется функцией POSIX getaddrinfo()
. Эта функция сначала проверяет на числовое использование IP-адреса inet_addr()
, и если это перестанет работать, то это затем попытается разрешить строку как доменное имя. inet_addr()
интерпретирует числа с продвижением 0 как восьмеричные, так например, 010
стал бы 8
, и 019
была бы ошибка (и будет поэтому разрешен как доменное имя). То же поведение происходит на Linux и Солярисе также.
От 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