MX记录查询和检查

24 投票
3 回答
29640 浏览
提问于 2025-04-16 07:56

我需要创建一个工具,用来检查一个域名的实时MX记录,看看这些记录是否符合预期(因为我们有员工曾经随便改动过这些记录,导致所有的来信都被转到无底洞里去了)。

说实话,我的编程水平一点也不高!我才刚看了《Dive Into Python》的40页,能读懂一些最基本的代码。但我愿意学习,而不是只想要一个现成的答案。

所以,有人能建议我应该用什么编程语言吗?

我在考虑用Python,打算先用类似0s.system()的方式来执行一个命令(dig +nocmd domain.com mx +noall +answer),这样可以拉取到记录。然后我有点困惑,不知道怎么把这些记录和现有的记录进行比较。

抱歉如果这些听起来有点乱!

谢谢,Chris

3 个回答

1

上面的解决方案是正确的。我想补充和更新一些内容。

  • dnspython已经更新,可以在python3中使用,并且它取代了dnspython3这个库,所以建议使用dnspython
  • 域名只会严格接受域名本身,而不会接受其他内容。

举个例子:dnspython.org是有效的域名,而www.dnspython.org则不是。

如果你想获取某个域名的邮件服务器,这里有一个函数。

def get_mx_server(domain: str = "dnspython.org") -> str:
    mail_servers = resolver.resolve(domain, 'MX')
    mail_servers = list(set([data.exchange.to_text()
                             for data in mail_servers]))
    return ",".join(mail_servers)

18

可以看看 dnspython 这个模块,它可以帮你完成查找工作,不需要你去调用系统命令。

52

使用 dnspython 模块(这个模块不是自带的,你需要用 pip install 来安装它):

>>> import dns.resolver
>>> domain = 'hotmail.com'
>>> for x in dns.resolver.resolve(domain, 'MX'):
...     print(x.to_text())
...
5 mx3.hotmail.com.
5 mx4.hotmail.com.
5 mx1.hotmail.com.
5 mx2.hotmail.com.

撰写回答