2010-12-02 9 views
9

Necesito crear una herramienta que verifique los dominios en vivo en mx en contra de lo que debería esperarse (hemos tenido problemas con algunos miembros de nuestro personal que intentaron redireccionar todos los correos entrantes al vacío)Búsqueda y verificación de registros MX

Ahora no voy a mentir, no soy un programador competente en lo más mínimo! Tengo alrededor de 40 páginas para "sumergirme en Python" y puedo leer y comprender el código más básico. Pero estoy dispuesto a aprender en lugar de solo recibir una respuesta.

Entonces, ¿alguien podría sugerir qué idioma debería utilizar?

Yo estaba pensando en usar Python y comenzando con algo en la línea de la utilización de 0s.system() para hacer un (cavar + nocmd domain.com mx + + respuesta Noall) para tirar de los registros, que a continuación, obtener una poco confundido acerca de cómo comparar esto con un conjunto existente de registros.

Disculpa si todo eso suena como una tontería.

Gracias Chris

Respuesta

13

Echa un vistazo a dnspython, un módulo que debe hacer las operaciones de búsqueda para usted muy bien sin necesidad de recurrir a las llamadas al sistema.

+0

¡Gracias! ¿Funcionará esto con 3.0? –

+0

No lo he probado. "2.4 o posterior" generalmente no significa lo que parece, pero supongo que es posible. – geoffspear

+0

Ok, lo intentaré, gracias por su ayuda :) –

22

Con dnspython módulo (no incorporado, debe pip install ella):

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

Debe mencionar, que uno necesita el módulo 'dnspython' para eso. – Michael

1

Por qué no usar nslookup? Este código debería ser compatible con 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

Confiar en la herramienta externa * y * obtener la penalización de rendimiento de llamar a un programa externo es malo. No hay una razón especial para hacer eso. –

+1

¿En qué crees que confían las otras respuestas aquí? No hay soporte DNS integrado en Python, por lo que todas estas otras soluciones * también * dependen de algo externo. ¿Puedes por favor cuantificar tu crítica un poco más constructivamente? –

+11

Claro, otras respuestas se basan en dnspython, que hace llamadas al sistema desde el mismo proceso, su solución se basa en una herramienta externa; que engendra un nuevo proceso en cada llamada de la función (+ tiene que analizar todos los errores posibles en lugar de recibir excepciones). –

Cuestiones relacionadas