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
我正在使用 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