DNS-py2/main.py

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", "EligibilityID", "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) )