gethostbynamel() 和 dns_get_record() returns 对于某些域为空

gethostbynamel() and dns_get_record() returns empty for some domains

我正在使用 Google Cloud 的计算实例 VM,已安装 Debian 10 和 PHP 7.3。

然后尝试运行这个:

php -r "print_r(gethostbynamel('2.0.0.127.zen.spamhaus.org.'));"

令人惊讶的是 returns 一个空字符串。

但是,在任何其他非Google 云 VM 上它都能完美运行:

Array ( [0] => 127.0.0.4 [1] => 127.0.0.10 [2] => 127.0.0.2 ) 

更陌生的是,使用 gethostbyname() 效果非常好:

php -r "print_r(gethostbyname('2.0.0.127.zen.spamhaus.org.'));"

但显然我只得到一个结果,而不是全部。

我也试过这个命令:

php -r "print_r(dns_get_record('2.0.0.127.zen.spamhaus.org.', DNS_A));"

但它 returns 是一个空数组。

所以 gethostbynamel() 和 dns_get_record() 似乎显示空字段。

虽然 gethostbyname() 工作完美。

我在 Google 防火墙上为出站流量打开了端口 53 TCP。

有谁知道为什么会发生这种行为?

如果您有任何建议,请分享。

这是一个已知的预期行为,在 spamhaus site 中也被提及。

它也适用于您的 VM 的内部 DNS 解析器。 Google DNS 将 return 来自“Spamhaus”public DNSBL 服务器的“未列出”(NXDOMAIN) 回复,因为 Google DNS 服务启用了 DNSBlock。

我建议您在对 Spamhaus 进行 DNSBL 查询时使用自己的 DNS 服务器。如果无法做到这一点,请联系 Spamhaus Technology 以获取其他选项。

有关 DNSBL 的更多信息,请参阅 link