Christopher Long
Christopher Long

Reputation: 904

MX Record lookup and check

I need to create a tool that will check a domains live mx records against what should be expected (we have had issues with some of our staff fiddling with them and causing all incoming mail to redirected into the void)

Now I won't lie, I'm not a competent programmer in the slightest! I'm about 40 pages into "dive into python" and can read and understand the most basic code. But I'm willing to learn rather than just being given an answer.

So would anyone be able to suggest which language I should be using?

I was thinking of using python and starting with something along the lines of using 0s.system() to do a (dig +nocmd domain.com mx +noall +answer) to pull up the records, I then get a bit confused about how to compare this to a existing set of records.

Sorry if that all sounds like nonsense!

Thanks Chris

Upvotes: 25

Views: 31620

Answers (3)

Paulo Scardine
Paulo Scardine

Reputation: 77291

With dnspython module (not built-in, you must pip install it):

>>> 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.

Upvotes: 53

Karan Mittal
Karan Mittal

Reputation: 181

the above solutions are correct. some things I would like to add and update.

  • the dnspython has been updated to be used with python3 and it has superseeded the dnspython3 library so use of dnspython is recommended
  • the domain will strictly take in the domain and nothing else.

for example: dnspython.org is valid domain, not www.dnspython.org

here's a function if you want to get the mail servers for a domain.

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)

Upvotes: 2

Wooble
Wooble

Reputation: 89937

Take a look at dnspython, a module that should do the lookups for you just fine without needing to resort to system calls.

Upvotes: 19

Related Questions