我正在尝试检查一个域名是否有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)
然而,直到昨天它还工作得很好,但当我今天尝试运行相同的代码时,我面临着这个问题。
1条答案
按热度按时间kb5ga3dv1#
如果远程DNS服务器需要沿着时间才能响应,或者接受连接但根本没有响应,您唯一能做的就是继续操作。也许稍后再试。您可以使用
try
/except
捕获错误:如果你想应用一个更长的超时,
resolve
方法接受一个lifetime
关键字参数,这个参数在Resolver.resolve
文档中有说明,Resolver
类(在同一页的顶部有说明)也有一个timeout
参数,如果你构建自己的解析器,你可以调整这个参数。对于生产代码,您可能应该将其他可能的错误添加到
except
子句中;示例文档向您精确地显示了resolve
可能引发的异常。可能有一个异常基类,所有这些都是从它继承的;我懒得回去检查了。然后你只需要在
except
语句中列出基类。提取实际的MX记录并显示它可能比打印
True
更有用,但这是一个单独的主题。您的错误消息表明您可以连接到您自己的解析器在10.24.0.1,但在一般情况下,如果您的网络(防火墙等)阻止您访问DNS出于某种原因,也可能发生此错误。