From 214be5a275d503e8849a521d170a8a0a1e950155 Mon Sep 17 00:00:00 2001 From: Benjamyn Love Date: Tue, 20 Mar 2018 06:46:05 +1100 Subject: [PATCH] So many changes.... Made IP lookups much nicer to look at, added subdomain lookups Fixed some bugs with whois parsing, now AUS eligbility info is properly obtained --- config.json | 2 +- main.py | 53 ++++++++++++++++++++++++++++++++++++++++------------- 2 files changed, 41 insertions(+), 14 deletions(-) diff --git a/config.json b/config.json index 8ee6940..8c068fa 100644 --- a/config.json +++ b/config.json @@ -3,6 +3,6 @@ "dnsrecords":["A", "AAAA", "MX", "TXT", "NS", "SOA"], "colour_attn":"red", "colour_good":"green", - "colour_pretty":"blue", + "colour_pretty":"cyan", "colour_default":"reset" } diff --git a/main.py b/main.py index 35d3d9b..36f92a6 100755 --- a/main.py +++ b/main.py @@ -15,7 +15,9 @@ from libs import colours as gc running = 1 prompt = ': ' indent = '~ ' -whoisrecs = ["NotFound", "DomainName", "Registrar", "Status", "UpdatedDate", "CreationDate", "ExpirationDate", "RegistrantName", "RegistrantEmail", "EligibilityName", "EligibilityType", "EligibilityID", "NameServer"] +whoisrecs = ["NotFound", "DomainName", "Registrar", "Status", "UpdatedDate", "CreationDate", "ExpirationDate", "RegistrantName", "RegistrantEmail", "EligibilityName", "EligibilityType", "EligibilityID", "RegistrantID", "NameServer"] +#ipData = ["asn_country_code", "asn_description"] +ipData = {"asn_country_code":"Country", "asn_description":"Owner"} # Loaded from the config file jsonData = config.readConf() @@ -58,17 +60,7 @@ def parseInput(inData): 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)) + lookupIP(tmpInData) else: lookupDomain(tmpInData) @@ -80,6 +72,20 @@ def recLookup(inData): except Exception as e: pass +def subLookup(inData, sub): + try: + data = dns.resolver.query(sub + '.' + inData) + for rdata in data: + if data.qname == data.canonical_name: + for rdata in dns.resolver.query(sub + '.' + inData): + record = rdata + else: + for rdata in dns.resolver.query(sub + '.' + inData, "CNAME"): + record = rdata + print(indent + colour_pretty + "%s:\t%s%s" % (sub, colour_good, record) + colour_default) + except Exception as e: + pass + def lookupDomain(inData): try: result = domainWhois(inData) @@ -90,6 +96,26 @@ def lookupDomain(inData): printWhois(result) print("\nDNS Records") recLookup(inData) + print("\nSubDomains") + for subs in subdomains: + subLookup(inData, subs) + +def lookupIP(inData): + with warnings.catch_warnings(): + warnings.filterwarnings("ignore", category=UserWarning) + ipnet = Net(inData) + ipobj = IPASN(ipnet) + results = ipobj.lookup() + #for key,value in results.iteritems(): + # print('%s: %s' % (key, value)) + for types in ipData: + print(indent + "%s%s:%s\t%s%s" % (colour_pretty, ipData[types], colour_good, results[types], colour_default)) + rev_name = reversename.from_address(inData) + try: + reverseName = str(dns.resolver.query(rev_name, "PTR")[0]) + except Exception as E: + reverseName = E + print('\n' + indent + '%sPTR:%s\t\t%s%s' % (colour_pretty, colour_good, reverseName, colour_default)) # Taken and modified from DNSpy 1, I am not asahmed it works def checkIfIP(in1): @@ -108,4 +134,5 @@ def checkIfIP(in1): signal.signal(signal.SIGINT, signal_handler) while running == 1: - parseInput(raw_input("\nPlease Enter a domain" + prompt) ) + parseInput(raw_input("Please Enter a domain" + prompt) ) + print('\n')