viernes, 14 de febrero de 2014

Detectar si un dominio tiene registros MX con Powershell

Para inaugurar este pequeño rincón y empezar a añadir herramientas a la movida, que mejor forma de hacerlo que con Powershell.

Ámbito de la aplicación: Administrativo
Uso personal de la aplicación: Yo personalmente uso la siguiente técnica para lidiar con tareas administrativas. Por ejemplo, cada cierto tiempo se me remite un listado en Excel con varias columnas, una de ellas corresponde a "Emails", puede haber uno o más siendo estos separados por comas. Bien, con la función que os voy a enseñar compruebo los dominios de los correos para evitar rebotes de nuestro servidor de correos.


Para empezar con la explicación, remarco que aquí solo pondré la función que comprueba los dominios:

Ejecutamos Windows Powershell ISE y al lío.


Lo primero a pensar es si necesitaremos pasar algún parámetro y si tendremos que devolver algún valor. En este caso ambas cuestiones se responden con un sí.
Le pasaremos por parámetro el dominio a comprobar y devolveremos un valor entero para determinar el estado.

El siguiente paso, es averiguar como comprobar si existen registros MX en el DNS del dominio que estamos comprobando. Todos conoceréis nslookup, pues va a ser la reina del baile, ya que es tan sencillo que prácticamente no tendremos que hacer nada.

Sintaxis nslookup para comprobar un registro MX en un dominio:
nslookup -type=mx $dominio 

Para ejecutar comando en powershell lo haremos como nos dicen los manuales con el cmlet Invoke-Expression. Quedaría algo así:

Invoke-Expression -Command "nslookup -type=mx $dominio" 2>$null

He decidido redirigir los mensajes de error a null ya que no queremos que nos molesten pequeños warnings como la respuesta no autoritativa. 

Necesitaremos recorrer la respuesta del nslookup y esto lo haremos encadenando la expresión Invoke-Expression con un foreach-object. Al recorrerlo mediante el parámetro -match comprobaremos si existe la cadena 'mail exchanger', y si es así sumaremos 1 a un contador.

Si el contador es igual o mayor a 1 significa que el dominio ha devuelto como mínimo una cadena que contiene 'mail exchanger' y por lo tanto existe un registro MX en el DNS.

Devolveremos 1 si existe 0 si no existe.
Código completo:

No hay comentarios:

Publicar un comentario