为什么dnspython模块给予LifetimeTimeout错误?

pdtvr36n  于 2023-01-12  发布在  Python
关注(0)|答案(1)|浏览(252)

我正在尝试检查一个域名是否有MX记录解析使用dnspython模块。我得到了以下错误,而连接到mx记录服务器。谁能解释一下为什么我面临这个问题?

Traceback (most recent call last):
  File "c:\Users\iamfa\OneDrive\Desktop\test\email_mx.py", line 26, in <module>
    dns.resolver.resolve("cmrit.ac.in", 'MX')
  File "c:\Users\iamfa\OneDrive\Desktop\test\env1\lib\site-packages\dns\resolver.py", line 1193, in resolve
    return get_default_resolver().resolve(qname, rdtype, rdclass, tcp, source,
  File "c:\Users\iamfa\OneDrive\Desktop\test\env1\lib\site-packages\dns\resolver.py", line 1066, in resolve
    timeout = self._compute_timeout(start, lifetime,
  File "c:\Users\iamfa\OneDrive\Desktop\test\env1\lib\site-packages\dns\resolver.py", line 879, in _compute_timeout
    raise LifetimeTimeout(timeout=duration, errors=errors)
dns.resolver.LifetimeTimeout: The resolution lifetime expired after 5.001 seconds: Server 10.24.0.1 UDP port 53 answered The DNS operation timed out.; Server 198.51.100.1 UDP port 53 answered The DNS operation timed out.; Server 10.95.11.110 UDP port 53 answered The DNS operation timed out.

这是我的代码:

import dns.resolver
 if dns.resolver.resolve("cmrit.ac.in", 'MX'):
    print(True)
 else:
    print(False)

然而,直到昨天它还工作得很好,但当我今天尝试运行相同的代码时,我面临着这个问题。

kb5ga3dv

kb5ga3dv1#

如果远程DNS服务器需要沿着时间才能响应,或者接受连接但根本没有响应,您唯一能做的就是继续操作。也许稍后再试。您可以使用try/except捕获错误:

import dns.resolver

try:
  if dns.resolver.resolve("cmrit.ac.in", 'MX'):
    print(True)
  else:
    print(False)
except dns.resolver.LifetimeError:
    print("timed out, try again later maybe?")

如果你想应用一个更长的超时,resolve方法接受一个lifetime关键字参数,这个参数在Resolver.resolve文档中有说明,Resolver类(在同一页的顶部有说明)也有一个timeout参数,如果你构建自己的解析器,你可以调整这个参数。
对于生产代码,您可能应该将其他可能的错误添加到except子句中;示例文档向您精确地显示了resolve可能引发的异常。

...
except (dns.resolver.LifetimeTimeout, dns.resolver.NXDOMAIN,
        dns.resolver.YXDOMAIN, dns.resolver.NoAnswer,
        dns.resolver.NoNameservers) as err:
  print("halp, something went wrong:", err)

可能有一个异常基类,所有这些都是从它继承的;我懒得回去检查了。然后你只需要在except语句中列出基类。
提取实际的MX记录并显示它可能比打印True更有用,但这是一个单独的主题。
您的错误消息表明您可以连接到您自己的解析器在10.24.0.1,但在一般情况下,如果您的网络(防火墙等)阻止您访问DNS出于某种原因,也可能发生此错误。

相关问题