Я использую gethostbyname()
чтобы получить IP-адрес доменов в приложении.
В некоторых случаях также проверяются неверные адреса, например «50 .9.49».
echo gethostbyname('50.9.49'); // returns 50.9.0.49
В этом случае gethostbyname
должен возвращать false или немодифицированный неверный IP-адрес. однако функции возвращают измененный IP-адрес 50.9.0.49
.
Похож на ошибку в php. Быстрое исправление, по-видимому, заключается в проверке недействительных числовых адресов раньше, есть ли какие-либо другие предложения?
PHP gethostbyname
самом деле использует результаты gethostbyname
базовой ОС, например, из netdb.h
Linux или Windows Winsock2.h
. Именно эти функции производят возвращаемое значение, а не PHP.
/* {{{ php_gethostbyname */ static char *php_gethostbyname(char *name) { struct hostent *hp; struct in_addr in; hp = gethostbyname(name); if (!hp || !*(hp->h_addr_list)) { return estrdup(name); } memcpy(&in.s_addr, *(hp->h_addr_list), sizeof(in.s_addr)); return estrdup(inet_ntoa(in)); } /* }}} */
Похоже, что это недокументированная функция для работы IP-адресов. Как упоминалось в комментариях к вашему вопросу, ping 50.9.49
в Windows на самом деле 50.9.0.49
. Если вы введете адрес как abd
, он автоматически ab0.d
нуль как c
: ab0.d
Если вы просто вводите ad
, вставляются два нуля: a.0.0.d
Это было протестировано как с Windows 7, так и с Debian Linux.