MX Record поиск и проверка - PullRequest
12 голосов
/ 02 декабря 2010

Мне нужно создать инструмент, который будет проверять живые mx-записи доменов на предмет ожидаемых результатов (у нас были проблемы с некоторыми нашими сотрудниками, которые возились с ними и заставляли перенаправлять всю входящую почту в пустоту)1002 * Теперь я не буду лгать, я совсем не компетентный программист!У меня около 40 страниц в "погружение в Python" и могу читать и понимать самый основной код.Но я хочу учиться, а не просто получить ответ.

Так кто-нибудь сможет подсказать, какой язык мне следует использовать?

Я думал об использовании python и начинал с чего-то вроде использования 0s.system () для выполнения (dig + nocmd domain.com mx + noall + answer) для извлечения записей, затем язапутаться в том, как сравнить это с существующим набором записей.

Извините, если все это звучит как чепуха!

Спасибо, Крис

Ответы [ 3 ]

33 голосов
/ 02 декабря 2010

С модулем 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.

15 голосов
/ 02 декабря 2010

Взгляните на dnspython , модуль, который должен прекрасно выполнять поиск, не прибегая к системным вызовам.

1 голос
/ 06 марта 2014

Почему бы не использовать 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
...