You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:05:23