baoSOC/dnschecker.py
2024-07-02 09:12:58 +02:00

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