#!/usr/bin/python2.7 import whois import readline import signal import dns.resolver import json import warnings from dns import reversename from ipwhois.net import Net from ipwhois.asn import IPASN from pprint import pprint from libs import config from libs import colours as gc running = 1 prompt = ': ' indent = '~ ' whoisrecs = ["NotFound", "DomainName", "Registrar", "Status", "UpdatedDate", "CreationDate", "ExpirationDate", "RegistrantName", "RegistrantEmail", "EligibilityName", "EligibilityType", "EligibilityID", "NameServer"] # Loaded from the config file jsonData = config.readConf() subdomains = jsonData["subdomains"] dnsrecords = jsonData["dnsrecords"] colour_attn = gc.getColour(jsonData["colour_attn"]) colour_good = gc.getColour(jsonData["colour_good"]) colour_pretty = gc.getColour(jsonData["colour_pretty"]) colour_default = gc.getColour(jsonData["colour_default"]) # Endconfig block def domainWhois(inData): whoisData = whois.whois(inData).query() return whois.Parser(inData, whoisData[1]).parse() def signal_handler(singal, frame): #print('\n') quit() def printWhois(resultData): for x in range(0, len(whoisrecs)): try: for item in resultData[whoisrecs[x]]: if whoisrecs[x] == "Status": if "ok" in item or "OK" in item: print(indent + colour_good + '%s: %s' % (whoisrecs[x], item) + colour_default) else: print(indent + colour_attn + '%s: %s' % (whoisrecs[x], item) + colour_default) else: print(indent + '%s: %s' % (whoisrecs[x], item)) except Exception as e: pass def parseInput(inData): tmpInData = inData.lower() tmpInData = tmpInData.strip() if tmpInData == "quit": quit() if checkIfIP(tmpInData): ##IP lookup code print("Got IP address") with warnings.catch_warnings(): warnings.filterwarnings("ignore", category=UserWarning) ipnet = Net(tmpInData) ipobj = IPASN(ipnet) results = ipobj.lookup() for key,value in results.iteritems(): print('%s: %s' % (key, value)) rev_name = reversename.from_address(tmpInData) reverseName = str(dns.resolver.query(rev_name, "PTR")[0]) print('\nPTR: %s' % (reverseName)) else: lookupDomain(tmpInData) def recLookup(inData): for dnsrec in dnsrecords: try: for rdata in dns.resolver.query(inData, dnsrec): print( indent + colour_pretty + "%s:\t%s%s" % (dnsrec, colour_good, rdata) + colour_default) except Exception as e: pass def lookupDomain(inData): try: result = domainWhois(inData) except Exception as E: print('%s : TLD most likely needs to be configured' % (E)) result = "Error" print("\nWhois Information") printWhois(result) print("\nDNS Records") recLookup(inData) # Taken and modified from DNSpy 1, I am not asahmed it works def checkIfIP(in1): count = 0 inSplit = in1.split('.') if len(inSplit) != 4: return False for part in inSplit: if part.isdigit(): count += 1 else: return False if count == 4: return True signal.signal(signal.SIGINT, signal_handler) while running == 1: parseInput(raw_input("\nPlease Enter a domain" + prompt) )