首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我应该多次调用dns_get_record(),还是使用DNS_ANY调用一次?

我应该多次调用dns_get_record(),还是使用DNS_ANY调用一次?
EN

Stack Overflow用户
提问于 2014-11-14 00:08:32
回答 1查看 697关注 0票数 4

对于记录()函数,使用DNS_ANY获取所有记录比单独调用类型更多或更少地发出http (或其他协议)请求吗?

代码语言:javascript
复制
// Is just 1 request? Or many requests (1 per each record type)?
dns_get_record('example.com', DNS_ANY);

VS

// 3 total requests?
dns_get_record('example.com', DNS_A);
dns_get_record('example.com', DNS_AAAA);
dns_get_record('example.com', DNS_MX); 

基本上,我想尽量减少网络请求,但我不知道dns_get_record()是如何工作的。

由于文档中说DNS_ANY并不总是返回所有记录,所以我想我可以试着单独调用我想要的类型,以获得更可预测的结果。但是这样做会使3个单独的请求与DNS_ANY的一个请求相对应。这是真的吗?

顺便说一下,如果任何类型为null,DNS_ALLDNS_A + DNS_AAAA + DNS_MX将返回false,因此我不能这样做。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 22:26:25

为每种类型单独获取信息是效率低下的,因为这将涉及多个请求,而使用DNS_ANY参数和dns_get_record()只获取一个请求中的所有信息。DNS_ANY是一个参数,可以方便地查询dns服务器的信息。使用这个特定的参数,您可能会得到相当多的信息。

如果您尝试使用类似于gmail.com这样的域的Linux命令行提示符"dig“这样的实用工具,您自己就可以看到这一点,如下所示:

dig gmail.com ANY

产出如下:

代码语言:javascript
复制
`;; QUESTION SECTION:
;gmail.com.                     IN      ANY

;; ANSWER SECTION:
gmail.com.              2386    IN      MX      30 alt3.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      40 alt4.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      5 gmail-smtp-in.l.google.com.
gmail.com.              2386    IN      MX      10 alt1.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              2386    IN      MX      20 alt2.gmail-smtp-in.l.google.c                                                                              om.
gmail.com.              85186   IN      SOA     ns1.google.com. dns-admin.google                                                                              .com. 2012061200 21600 3600 1209600 300
gmail.com.              81180   IN      NS      ns3.google.com.
gmail.com.              81180   IN      NS      ns4.google.com.
gmail.com.              81180   IN      NS      ns1.google.com.
gmail.com.              81180   IN      NS      ns2.google.com.

;; AUTHORITY SECTION:
gmail.com.              81180   IN      NS      ns2.google.com.
gmail.com.              81180   IN      NS      ns3.google.com.
gmail.com.              81180   IN      NS      ns4.google.com.
gmail.com.              81180   IN      NS      ns1.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         223708  IN      A       216.239.32.10
ns2.google.com.         223708  IN      A       216.239.34.10
ns3.google.com.         223708  IN      A       216.239.36.10
ns4.google.com.         223708  IN      A       216.239.38.10

;; Query time: 4 msec
[snip] 

PHP的dns_get_record()的行为类似于dig实用程序,即它与dns服务器联系并执行查询。像"DNS_ANY“这样的参数是有利的,因为它可以同时得到所有的东西。因为"dig“花费了4毫秒,所以我认为dns_get_record()所用的时间大约是同样长,或者稍微长一点。由于DNS_ANY参数可能会产生比所需的信息更多的信息,例如,通过将DNS_MX与该函数一起使用,可以将该查询限制为"MX“记录。

如果您对该函数的PHP内部源代码感到好奇,请查看这里。内部源代码通常是用C语言编写的。

如果您想了解更多关于dns系统如何工作的信息,特别是在使用PHP时,请参阅我的文章“电子邮件验证”(2008年6月)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26920802

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档