import subprocess
import re # YAY REVERSE ENGINEER... wait its just regex

#Made this work with linux magic, test

inInput = ""
partDomain = ""
running = 1
pingOn = "P"
whoOn = "W"
phrases = ["ping", "whois", "quit", "clear", "help"]
   
def printHelp():
    print "========================================================"
    print "=                 help - This screen                   ="
    print "=              clear - Clears the screen               ="
    print "=    ping - Enables/Disables pinging the IP Address    ="
    print "========================================================"
    print "========================================================"

def compareSOA(inNameservers, inDomain, origSOA):
    dnsServer = '8.8.8.8'                
    soaRecords = []
    count = 0
    outSOA = ''
    returnmsg = "SOA Good"
    for nameserver in inNameservers:
        if nameserver != '':
            dnsServer = "@" + nameserver
        try:
            outSOA = subprocess.check_output(["dig", "SOA", dnsServer, "+short", inDomain])
        except subprocess.CalledProcessError as e:
            output = e.output
            returncode = e.returncode


        outSOAa = outSOA.split(' ')
        #print outSOAa[2]
        if len(outSOAa) != 1:
            soaRecords.append(outSOAa[2])
            for soa in soaRecords:
                if soa != soaRecords[0]:
                    return "SOA Records don't Match"
    return "SOA good"        

    #print soaRecords


def checkPhrase(inputs):
    for word in phrases:
        if inputs == word:
            options(inputs)
            return 1
    return 0

def options(inputs):
    global whoOn
    global pingOn

    if inputs == "ping":
        if pingOn == "P":
            pingOn = "p"
        else:
            pingOn = "P"
    if inputs == "whois":
        if whoOn == "W":
            whoOn = "w"
        else:
            whoOn = "W"
    if inputs == "clear":
        subprocess.call("clear")
    if inputs == "help":
        printHelp()

def iterate(inArray, pre):
    count = 0
    while count != len(inArray) - 1:
        print pre, inArray[count]
        count = count + 1

def whois(inDomain):
    lookup = subprocess.check_output(["whois", inDomain])
    print "========================================================"
    test = lookup.split("\n")
    iterate(test, "")

def dig(inDomain, record):
    dig = subprocess.check_output(["dig", record, "+short", inDomain])
    print "========================================================" #ADD REST OF DIGS
    test = dig.split("\n")
    #print record, test[0]
    iterate(test, record) #fix up mutiple record types...
    return test

def ipLookup(inDomain):
    host = "N/A"
    ipLook = subprocess.check_output(["geoiplookup", inDomain])
    try:
        host = subprocess.check_output(["host", inDomain]) #Do exit status check...
        returncode = 0
    except subprocess.CalledProcessError as e:
        output = e.output
        returncode = e.returncode

    print '\n', ipLook, '\n', "PTR: ", host 

def ipPing(inDomain):
    ping = subprocess.call(["ping", "-c 2", inDomain])
    #iterate(ping, "")

def getInput():
    global inInput 
    global partDomain
    global running
    inInput = raw_input("["+ pingOn +"][" + whoOn + "] Please enter a domain/IP: ")
    partDomain = inInput.split(".")
    if inInput == "quit":
        running = 0

#Main Loop
while running == 1:
    getInput()
    if checkPhrase(inInput) == 1 or len(partDomain) == 1:
        pass
    else:
        if running == 0:
            pass
        else:
            if len(partDomain) == 4:
                print "========================================================"
                ipLookup(inInput)
                if pingOn == "P":
                    print "========================================================"
                    ipPing(inInput)
                else:
                    pass
            else:
                if whoOn == "W":
                    whois(inInput)
                else:
                    pass
                #Condense dig calls
                dig(inInput, "A")
                dig(inInput, "MX")
                dig(inInput, "TXT")
                test = dig(inInput, "NS")
                dig(inInput, "SRV")
                soaRec = dig(inInput, "SOA")
                print compareSOA(test, inInput, soaRec)