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

如何在Python 3中使用DNS解析器?及dnspython导入报错排查

在Python 3中使用DNS解析器并查询MX记录

先解决ModuleNotFoundError: No module named 'dns'的问题

这个报错大概率是因为dnspython包没安装到PyCharm当前使用的虚拟环境里——毕竟PyCharm默认会给每个项目创建独立的虚拟环境,和系统全局的Python环境是分开的。给你两种靠谱的解决办法:

方法1:直接在PyCharm内安装

  1. 打开你的PyCharm项目,点击顶部菜单栏的File → Settings(Windows/Linux)或者PyCharm → Settings(Mac)
  2. 在弹出的窗口里,找到Project: [你的项目名] → Python Interpreter
  3. 点击右上角的+号,在搜索框输入dnspython,找到后点击Install Package,等待安装完成即可。

方法2:用终端命令安装(确保对应虚拟环境)

  1. 如果你的项目用了虚拟环境,先激活它:
    • Windows:在PyCharm的Terminal里输入venv\Scripts\activate(venv是默认虚拟环境文件夹名,改了的话对应替换)
    • Mac/Linux:输入source venv/bin/activate
  2. 激活环境后,输入pip install dnspython,等待安装完成。

安装完成后,查询MX记录的代码示例

现在可以正常导入dns.resolver了,下面是查询域名MX记录的完整实用代码:

import dns.resolver

def get_mx_records(domain):
    try:
        # 指定查询记录类型为MX
        answers = dns.resolver.resolve(domain, 'MX')
        # 遍历并输出结果
        print(f"域名 {domain} 的MX记录:")
        for rdata in answers:
            print(f"优先级: {rdata.preference}, 邮件服务器: {rdata.exchange}")
        return [(rdata.preference, rdata.exchange) for rdata in answers]
    except dns.resolver.NXDOMAIN:
        print(f"错误:域名 {domain} 不存在")
    except dns.resolver.NoAnswer:
        print(f"错误:域名 {domain} 未配置MX记录")
    except Exception as e:
        print(f"查询出错:{str(e)}")

# 调用示例
get_mx_records("example.com")

代码小解释:

  • dns.resolver.resolve(domain, 'MX'):核心方法,指定要查询的域名和记录类型(这里是MX)
  • rdata.preference:MX记录的优先级,数字越小优先级越高
  • rdata.exchange:负责接收该域名邮件的服务器地址
  • 异常处理:覆盖了域名不存在、无MX记录等常见场景,避免程序直接崩溃

额外小技巧

如果你还想查询其他类型的DNS记录(比如A、AAAA、CNAME),只需要把resolve方法的第二个参数改成对应类型即可,比如dns.resolver.resolve("example.com", 'A')就能查询A记录。

内容的提问来源于stack exchange,提问作者Awesome

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:54:03