3

我正在开发一个基于 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")

谢谢

4

1 回答 1

2

正如那句名言所说,“视情况而定”。

您需要在“最佳方法”中定义什么是“最佳”。这两种方法都正确地做事,只是不同的事情。

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

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

第二种方法基本上可以测试远程服务器的性能,无论您的本地程序(包括Python本身和dnspython库)性能如何(但您与远程服务器之间所需的网络时间将被计算在内)。

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

于 2018-12-14T23:10:46.010 回答