Почему MacOSX пытается разрешить, что нуль дополнил IP-адреса как имена хостов?

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

192.168.019.254

Неважно, как он пытался настроить сетевой стек Mac, он просто не работал. Но GUI также не жаловался на ошибки.

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

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

4
задан 16.09.2013, 19:01

1 ответ

Перевод от строки до адреса обычно выполняется функцией 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
10
ответ дан 07.12.2019, 19:25

Теги

Похожие вопросы