2010-12-02 12 views
9

Ich benötige ein Werkzeug zu schaffen, die eine Domänen leben MX-Aufzeichnungen gegen überprüfen, was zu erwarten sein (wir Probleme gehabt haben mit einigen unserer Mitarbeiter mit ihnen hantieren und verursacht alle eingehenden E-Mails in die Leere zu umgeleitet)MX-Datensatz-Lookup und überprüfen

Jetzt werde ich nicht lügen, ich bin nicht zu einem kompetenten Programmierer im geringsten! Ich bin etwa 40 Seiten in "tauchen in Python" und kann den grundlegendsten Code lesen und verstehen. Aber ich bin bereit zu lernen, anstatt nur eine Antwort zu bekommen.

So würde jemand in der Lage sein, vorzuschlagen, welche Sprache soll ich verwenden?

ich mit Python dachte und beginnend mit etwas entlang der Linien der Verwendung 0s.system() a (graben + nocmd domain.com mx + Noall + Antwort) zu tun, um die Aufzeichnungen zu ziehen, habe ich dann bekommen ein etwas verwirrt darüber, wie man dies mit einer bestehenden Menge von Datensätzen vergleicht.

Sorry, wenn das alles wie Unsinn klingt!

Dank Chris

Antwort

13

Werfen Sie einen Blick auf dnspython, ein Modul, das, ohne auf Systemaufrufe greifen die Lookups für Sie ganz gut tun sollten.

+0

Vielen Dank! Wird das mit 3.0 funktionieren? –

+0

Ich habe es nicht versucht. "2.4 oder später" bedeutet im Allgemeinen nicht, wie es sich anhört, aber ich denke, es ist möglich. – geoffspear

+0

Ok ich gebe es einen gehen, vielen Dank für Ihre Hilfe :) –

22

Mit dnspython Modul (nicht eingebaut, müssen Sie es 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. 
+4

Sie erwähnen sollte, dass man das 'dnspython' Modul dafür braucht. – Michael

1

Warum nicht nslookup verwenden? Dieser Code sollte kompatibel sein mit 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

Es ist schlecht, sich auf das externe Tool * und * zu verlassen, um die Leistungseinbußen beim Aufruf eines externen Programms zu erleiden. Dafür gibt es keinen besonderen Grund. –

+1

Worauf verlassen sich die anderen Antworten? Es gibt keine eingebaute DNS-Unterstützung in Python, daher sind alle anderen Lösungen * auch * auf etwas Externes angewiesen. Können Sie bitte Ihre Kritik etwas konstruktiver quantifizieren? –

+11

Sicher, vertrauen andere Antworten auf dnspython, das tut System aus demselben Prozess aufruft, Ihre Lösung auf einem externen Tool beruht; Das erzeugt bei jedem Aufruf der Funktion einen neuen Prozess (+ Sie müssen alle möglichen Fehler analysieren, anstatt Ausnahmen zu erhalten). –

Verwandte Themen