Python – MX Scanner

# Author: Kerry Cordero
# Version: 1.0.0
# Description: This script will look at a file called "mx-records.txt" and run a DIG MX scan against it.  If it exists, it will be listed in green. If not, it show "No Record" in red. 

import os
import subprocess
from prettytable import PrettyTable
from termcolor import colored


# Function to perform a DNS MX record lookup using dig
def get_mx_record(domain):
    try:
        # Run the dig command to get MX records
        result = subprocess.check_output(['dig', '+short', 'MX', domain], text=True)
        
        # If the result is not empty, return it, otherwise return None
        return result.strip() if result.strip() else None
    except Exception as e:
        print(f"Error while executing dig command: {e}")
        return None


# Get the absolute directory path of this script
script_dir = os.path.dirname(os.path.abspath(__file__))

# Construct the absolute file path
file_path = os.path.join(script_dir, 'mx-records.txt')

# Read the list of FQDNs from the file
try:
    with open(file_path, "r") as file:
        domains = [line.strip() for line in file.readlines()]
except FileNotFoundError:
    print(f"Error: File mx-records.txt not found in {script_dir}.")
    exit()

# Create a table with PrettyTable
table = PrettyTable()
table.field_names = ["Domain", "MX Record"]

# Loop through each domain and perform a DNS MX record lookup
for domain in domains:
    mx_record = get_mx_record(domain)
    
    # If an MX record exists, add it to the table in green
    # Otherwise, add "No Record" in red
    if mx_record:
        table.add_row([domain, colored(mx_record, 'green')])
    else:
        table.add_row([domain, colored("No Record", 'red')])

# Display the table
print(table)