2010-12-02 4 views
9

Je dois créer un outil qui vérifiera les enregistrements live d'un domaine par rapport à ce qui devrait être attendu (nous avons eu des problèmes avec certains membres de notre personnel qui ont trituré avec eux et provoqué tout le courrier entrant redirigé dans le videRecherche et vérification des enregistrements MX

Maintenant, je ne vais pas mentir, je ne suis pas un programmeur compétent dans le moindre! Je suis d'environ 40 pages dans "plonger dans python" et peut lire et comprendre le code le plus basique. Mais je suis prêt à apprendre plutôt que de recevoir une réponse.

Alors, est-ce que quelqu'un pourrait suggérer quelle langue je devrais utiliser? Je pensais utiliser python et commencer par quelque chose dans le sens de l'utilisation de 0s.system() pour faire un (dig + nocmd domain.com mx + noall + answer) pour remonter les enregistrements, puis je reçois un peu confus sur la façon de comparer cela à un ensemble existant d'enregistrements. Désolé, si tout cela sonne comme un non-sens!

Merci Chris

Répondre

13

Jetez un oeil à dnspython, un module qui devrait faire les recherches pour vous bien sans avoir besoin de recourir à des appels système.

+0

Merci! Est-ce que cela fonctionnera avec 3.0? –

+0

Je ne l'ai pas essayé. "2.4 ou plus tard" ne signifie généralement pas ce que cela ressemble, mais je suppose que c'est possible. – geoffspear

+0

Ok, je vais essayer, merci pour votre aide :) –

22

(vous devez pip install-il pas intégré,) Avec module dnspython:

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

Vous devriez mentionner, que l'on a besoin du module 'dnspython' pour cela. – Michael

1

Pourquoi ne pas utiliser nslookup? Ce code devrait être compatible avec 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

S'appuyer sur un outil externe * et * pour obtenir la pénalité de performance liée à l'appel d'un programme externe est mauvais. Il n'y a pas de raison particulière de le faire. –

+1

Selon vous, sur quoi les autres réponses reposent-elles? Il n'y a pas de support DNS intégré en Python donc toutes ces autres solutions * s'appuient aussi sur quelque chose d'externe. Pouvez-vous s'il vous plaît quantifier votre critique un peu plus constructive? –

+11

Bien sûr, d'autres réponses s'appuient sur dnspython, qui fait les appels système du même processus, votre solution repose sur un outil externe; cela engendre un nouveau processus à chaque appel de la fonction (+ vous devez analyser toutes les erreurs possibles au lieu de recevoir des exceptions). –

Questions connexes