MX记录查找和检查

时间:2010-12-02 15:48:57

标签: python mx-record

我需要创建一个工具来检查域名实时mx记录与预期的内容(我们的一些工作人员摆弄它们并导致所有传入的邮件重定向到虚空中)

现在我不会说谎,我一点也不是一个称职的程序员!我大约40页进入“潜入python”,可以阅读和理解最基本的代码。但我愿意学习,而不仅仅是给予答案。

那么任何人都可以建议我应该使用哪种语言?

我正在考虑使用python,并开始使用0s.system()来做一个(挖掘+ nocmd domain.com mx + noall +回答)来拉取记录,然后我得到一点对于如何将其与现有记录集进行比较感到困惑。

很抱歉,如果这听起来像废话!

由于 克里斯

4 个答案:

答案 0 :(得分:33)

使用dnspython模块(不是内置的,您必须pip install):

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

[更新]

对于python 3,它是pip install dnspython3

答案 1 :(得分:15)

看看dnspython,一个应该为你做的查找的模块,而不需要求助于系统调用。

答案 2 :(得分:1)

为什么不使用nslookup?此代码应与2.6 +

兼容
import os
import re

__query = 'nslookup -q=mx {0}'
__pattern = '\*\*\sserver\scan\'t\sfind'

def check_for_mx_record(domain):
    try:
        command = __query.format(domain)
        with os.popen(command) as response:
            result = response.readlines()
            return all(re.match(__pattern,l) == None for l in result)
    except Exception:
        return False

答案 3 :(得分:0)

上述解决方案是正确的。我想添加和更新一些东西。

  • 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)

相关问题