PHP:错误的gethostbyname(PHP: gethostbyname bug)

2019-09-17 06:33发布

我使用gethostbyname()来获得域名的IP地址的应用程序。

在某些情况下,像'50 .9.49' 无效地址也被选中。

echo gethostbyname('50.9.49'); // returns 50.9.0.49

在这种情况下gethostbyname应该返回false或未修饰无效的IP地址。 但是功能返回修改后的IP地址50.9.0.49

看起来像在PHP中的错误。 速战速决似乎是之前检查无效的数字地址,还有没有其他的建议?

Answer 1:

PHP的gethostbyname实际使用底层OS的结果gethostbyname ,例如,从linux的netdb.h或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));
}
/* }}} */


Answer 2:

看起来这是IPS是如何工作的无证功能。 正如在评论你的问题,提到ping 50.9.49在Windows实际上坪50.9.0.49 。 如果输入ADRESS如abd ,它会自动插入一个零cab0.d 。 如果你只是输入ad ,两个零插入: a.0.0.d

这已经过测试与Windows 7和Debian Linux的。



文章来源: PHP: gethostbyname bug