75 lines
2.2 KiB
Python
75 lines
2.2 KiB
Python
#!/usr/bin/venv python
|
|
# -*- coding: utf-8 -*-
|
|
|
|
import whois
|
|
import dns.resolver
|
|
import dns.name
|
|
from config import DNS_QUERIES_TYPE
|
|
|
|
|
|
class DNSChecker:
|
|
def __init__(self, api_key, fqdn, rrtype=DNS_QUERIES_TYPE):
|
|
self._fqdn = fqdn
|
|
self._rrtype = rrtype
|
|
|
|
def checkDomainExist(self):
|
|
"""
|
|
This function check if the domain exist
|
|
"""
|
|
try:
|
|
res_query = dns.resolver.resolve(self._fqdn, 'NS')
|
|
except dns.resolver.NoAnswer:
|
|
return False
|
|
except dns.resolver.NXDOMAIN:
|
|
return False
|
|
return True
|
|
|
|
def whois(self):
|
|
"""
|
|
This function will get an whois request for having some information
|
|
regarding the domain
|
|
"""
|
|
report = dict()
|
|
w = whois.whois(self._fqdn)
|
|
report['domain_name'] = w.domain_name
|
|
report['expiration_date'] = w.expiration_date
|
|
report['creation_date'] = w.creation_date
|
|
report['updated_date'] = w.updated_date
|
|
report['ns'] = w.name_servers
|
|
report['admin_name'] = w.admin_name
|
|
report['registrar'] = w.registrar
|
|
return report
|
|
|
|
def resolver(self):
|
|
"""
|
|
This function will resolv the FQDN with different type of RR
|
|
"""
|
|
report = dict()
|
|
|
|
for t in self._rrtype.keys():
|
|
report[t] = self._resolving(self._fqdn, t, self._rrtype[t])
|
|
return report
|
|
|
|
def _resolving(self, fqdn, t, attr):
|
|
report = list()
|
|
try:
|
|
res_query = dns.resolver.resolve(fqdn, t)
|
|
for rdata in res_query:
|
|
if isinstance(attr, list):
|
|
data = dict()
|
|
for a in attr:
|
|
data[a] = getattr(rdata, a)
|
|
report.append(data)
|
|
else:
|
|
report.append({
|
|
attr: getattr(rdata, attr)
|
|
})
|
|
except dns.resolver.NoAnswer:
|
|
pass
|
|
except dns.resolver.NXDOMAIN:
|
|
report.append({'error': 'Domain not exist'})
|
|
except dns.resolver.NoNameservers:
|
|
report.append({'error': 'Domain not exist'})
|
|
return report
|
|
|