衡量DNS解析时间的最佳方法

时间:2018-11-19 15:01:25

标签: python-3.x dns dnspython

我正在使用基于python 3.6的脚本来监视使用dns python的dns解析时间。我需要了解获得解决时间的最佳方法是什么。我当前正在使用以下内容:

方法:1

import dns.resolver
import time

dns_start = time.perf_counter()
answers = dns.resolver.query(domain, qtype)
dns_end = time.perf_counter()
print("DNS record is: " ,answers.rrset)
print('DNS time =' ,(dns_end - dns_start)* 1000,"ms")

方法2

import dns.resolver
import time

answers = dns.resolver.query(domain, qtype)
print("DNS record is: " ,answers.rrset)
print('DNS time =' , answers.response.time * 1000,"ms")

谢谢

1 个答案:

答案 0 :(得分:0)

俗话说“这取决于”。

您需要在“最佳方法”中为您定义“最佳”。两种方法都能正确执行操作,只是功能不同。

第一个将同时计算网络时间,远程服务器处理,然后本地生成和解析DNS消息,包括Python在dnspython库中花费的时间。

第二种方法仅考虑了网络和远程处理时间:如果您在https://github.com/rthalley/dnspython/blob/master/dns/query.py中搜索response_time,则会看到它是按照发送消息之前的时间之间的差值计算的(因此,在生成之后,将不包括生成时间)以及在接收到生成时间之后(因此在解析之前,因此将不包括解析时间)。

第二种方法基本上可以测试远程服务器的性能,而与本地程序(包括Python本身和dnspython库)的性能无关(但是将计入您和远程服务器之间的网络时间)。

第一种方法显示了感知的时间,因为它包括代码中做某事所需的所有时间,即构建DNS数据包并解析结果,如果没有这些操作,调用应用程序将无法处理DNS内容。