dnspython模块突发LifetimeTimeout错误的原因分析
问题:dnspython解析MX记录时出现LifetimeTimeout错误
我尝试使用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)
原因分析与解决方案
可能的原因
- 系统默认DNS服务器故障:错误日志显示配置的三个DNS服务器全部超时,说明你的系统默认DNS无法正常响应请求,可能是DNS服务器本身故障、网络环境变更(如公司/校园网DNS调整)或本地网络波动。
- 目标域名DNS临时异常:虽然之前正常,但
cmrit.ac.in的DNS服务可能临时出现故障,导致无法返回MX记录。可通过nslookup cmrit.ac.in MX或dig cmrit.ac.in MX等命令手动验证。 - 默认超时时间过短:dnspython默认超时为5秒,若网络延迟较高,可能导致请求超时。
- 网络拦截限制:本地防火墙、代理或网络运营商可能拦截了UDP 53端口的DNS请求,导致无法与服务器通信。
优化后的代码示例
可以指定公共DNS服务器并延长超时时间,同时增加异常处理:
import dns.resolver # 配置公共DNS服务器(如谷歌8.8.8.8、Cloudflare 1.1.1.1) resolver = dns.resolver.Resolver() resolver.nameservers = ['8.8.8.8', '1.1.1.1'] try: # 延长超时时间至10秒 answers = resolver.resolve("cmrit.ac.in", 'MX', lifetime=10) print(True) except dns.resolver.LifetimeTimeout: print(False) except dns.resolver.NXDOMAIN: # 域名不存在时的处理 print(False) except Exception as e: # 其他异常处理 print(f"错误:{str(e)}")
内容的提问来源于stack exchange,提问作者Faizan
相关产品推荐
相关产品推荐

