Fixed some crappy code TODO: Clean up current code Fixed input not being stripped Moved the dns lookup code Moved the whois lookup code Cleaned everythin up
103 lines
2.8 KiB
Python
Executable File
103 lines
2.8 KiB
Python
Executable File
#!/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
|
|
|
|
running = 1
|
|
prompt = ': '
|
|
indent = '~ '
|
|
whoisrecs = ["NotFound", "DomainName", "Registrar", "Status", "UpdatedDate", "CreationDate", "ExpirationDate", "RegistrantName", "EligibilityName", "Eligibilitytype", "NameServer"]
|
|
|
|
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]]:
|
|
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 + "%s:\t%s" % (dnsrec, rdata))
|
|
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)
|
|
|
|
##
|
|
# Add more params to the config file
|
|
# Like indent/prompts etc
|
|
##
|
|
|
|
jsonData = config.readConf()
|
|
#pprint(jsonData)
|
|
subdomains = jsonData["subdomains"]
|
|
dnsrecords = jsonData["dnsrecords"]
|
|
|
|
while running == 1:
|
|
parseInput(raw_input("\nPlease Enter a domain" + prompt) )
|