гетаддринфо "10. 10. 10. 10" - PullRequest
       4

гетаддринфо "10. 10. 10. 10"

2 голосов
/ 12 октября 2011

Я только что заметил, что если я передаю строку "10. 10. 10. 10" в getaddrinfo, я получаю обратно адрес 0.0.0.10.Результат одинаков как для OS X (Lion), так и для Linux (CentOS 5.6).Вы можете легко проверить это самостоятельно с помощью:

$ curl 'http://10 . 10 . 10 . 10/' 
curl: (7) Failed to connect to 0.0.0.10: No route to host

Есть ли конкретная причина для такого поведения, или я должен считать это ошибкой?Я бы ожидал, что он не сможет вернуть какой-либо адрес.

Редактировать: Тот же результат для "10 asdf", думаю, это место, которое делает это сделать.

1 Ответ

2 голосов
/ 13 октября 2011

POSIX позволяет строке, состоящей из одного числа (десятичного, шестнадцатеричного с начальным 0x или 0X или восьмеричного с начальным 0), указать адрес IPv4: см. определение inet_addr() (на которое ссылается определение getaddrinfo() для семейства адресов AF_INET).

Насколько я вижу, в нем ничего не говорится о том, как заканчивается входная строка, поэтому тот факт, что она останавливается на пробеле, вероятно, является лишь деталью реализации; но «10», безусловно, является допустимым представлением адреса IPv4, если он анализируется с помощью getaddrinfo() или inet_addr(). (Интересно, что эта форма не разрешена inet_pton() с AF_INET - которая принимает только стандартную четырехкомпонентную форму.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...