PHP5:dns_get_record()仅返回子域的A记录

时间:2009-08-18 15:17:00

标签: php dns soa

在Linux上运行PHP 5.2,我正在使用dns_get_record()运行一系列查询。从文档中可以看出,此函数复制了dig,但我发现不一致。我的目标是获得对每个主机名所属的域具有权威性的主要和次要名称服务器。

dns_get_record('example.com', DNS_NS);会返回好结果。 dns_get_record('www.example.com', DNS_NS);什么都不返回。 dns_get_record('www.example.com', DNS_ANY);仅返回A记录。 dns_get_record('www.example.com', DNS_SOA);不返回任何内容。

但是,从使用dig的命令行,我总能得到至少SOA:

dig www.example.com NS 要么 dig www.example.com SOA

返回包含名称服务器的有效AUTHORITY SECTION(IN SOA)。

我如何在PHP中复制它?我尝试过PEAR Net_DNS模块,看到类似的恶作剧与dns_get_record()一样。

2 个答案:

答案 0 :(得分:1)

当您从命令行dig时,您更直接(相对)连接到DNS。输出也针对该场景进行了格式化。执行php函数时,它返回其作者认为需要的值。不一定与dig直接对应。

如果您想获得dig结果,那么您可以使用exec('dig www.example.com ns');并根据需要解析该返回输出。

另外,如果您要查询DNS以获取子域名,即www。而不是tld(example.com),那么你不会得到与之相关的其他记录 - 你只能得到与该子域相关的结果,在你的情况下只是一个记录。

答案 1 :(得分:0)

我遇到了类似的问题,对于节点(或子域),您需要更加具体,并且知道您所请求的DNS条目的文本。

例如DMARC DNS条目是TXT条目,SPF和DKIM也是

$showResult = dns_get_record('_dmarc.domain.com', DNS_TXT); //returns an array

工作正常。