php - gethostbynamel() 和 dns_get_record() 对某些域返回空
问题描述
我正在使用 Google Cloud 的计算实例 VM,已安装 Debian 10 和 PHP 7.3。
然后尝试运行:
php -r "print_r(gethostbynamel('2.0.0.127.zen.spamhaus.org.'));"
令人惊讶的是它返回一个空字符串。
但是,在任何其他非 Google Cloud 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));"
但它返回一个空数组。
所以 gethostbynamel() 和 dns_get_record() 似乎显示空字段。
虽然 gethostbyname() 工作得很好。
我在 Google 防火墙上为出站流量打开了端口 53 TCP。
有谁知道为什么会发生这种行为?
如果您有建议,请分享。
解决方案
这是一种已知和预期的行为,也已在spamhaus 站点中被调用。
它也适用于您的 VM 的内部 DNS 解析器。Google DNS 将从“Spamhaus”公共 DNSBL 服务器返回“未列出”(NXDOMAIN) 回复,因为为 Google DNS 服务启用了 DNSBlock。
我建议您在对 Spamhaus 进行 DNSBL 查询时使用自己的 DNS 服务器。如果这不可行,请联系Spamhaus Technology以获取其他选项。
有关 DNSBL 的更多信息,请参阅链接
推荐阅读
- python - 如何将 JSON 对象插入 MySQL 数据库?
- javascript - 添加 ID 标头时 CSV 文件有错误或不是 SYLYK 文件
- vue.js - 如何在 Vue 中链接过渡/动画?
- php - PHP 错误代码:注意:尝试在第 95 行的 C:\xampp\htdocs\testing\index3.php 中获取非对象的属性 ...
- pattern-matching - OCaml:将变量与元组的解构元素匹配的模式?
- node.js - Nodejs redis 方法 BLPOP 阻塞了事件循环
- python-3.x - 突然变得非常非常大
- c# - C#中属性之间的区别
- html - 打开 DevTools 时 Electron BrowserWindow 切换到暗模式
- flutter - 错误打开模拟器我正在使用未在android studio中连接的flutter项目模拟器