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

Best approach to measure DNS resolution time

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

方法: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")

方法二

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")

谢谢

"It depends"俗话说

您需要在 "best approach" 中为您定义什么是 "best"。这两种方法做事正确,只是不同。

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

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

第二种方法基本可以测试远程服务器的性能,不考虑你本地程序(包括Python本身和dnspython库)的性能(但是你和远程服务器之间需要的网络时间会被计算在内) .

第一种方法显示感知时间,因为它包括代码中执行某些操作所需的所有时间,即构建 DNS 数据包和解析结果,没有这些操作,调用应用程序将无法对 DNS 内容执行任何操作。