SHA256
More tidying up of some bugs.
This commit is contained in:
+14
-4
@@ -9,6 +9,7 @@ from concurrent.futures import ThreadPoolExecutor
|
|||||||
from dns import message
|
from dns import message
|
||||||
from dns import query
|
from dns import query
|
||||||
from dns import rdatatype
|
from dns import rdatatype
|
||||||
|
from dns import rcode
|
||||||
from dns import name
|
from dns import name
|
||||||
from dns import flags
|
from dns import flags
|
||||||
from dns import exception
|
from dns import exception
|
||||||
@@ -103,12 +104,21 @@ def perform_query(full_domain, ns, record_type, timeout):
|
|||||||
if r.flags & flags.TC:
|
if r.flags & flags.TC:
|
||||||
r = query.tcp(q, ns, timeout=timeout)
|
r = query.tcp(q, ns, timeout=timeout)
|
||||||
|
|
||||||
|
# Check response code
|
||||||
|
response_rcode = r.rcode()
|
||||||
|
if response_rcode != 0: # 0 = NOERROR
|
||||||
|
rcode_name = rcode.to_text(response_rcode)
|
||||||
|
return (full_domain, ns, f"RCODE: {rcode_name}")
|
||||||
|
|
||||||
results = []
|
results = []
|
||||||
answers = r.answer
|
answers = r.answer
|
||||||
if answers:
|
if answers:
|
||||||
for rrset in answers:
|
for rrset in answers:
|
||||||
for item in rrset:
|
for item in rrset:
|
||||||
results.append(str(item))
|
results.append(str(item))
|
||||||
|
else:
|
||||||
|
# No answer records returned (NODATA)
|
||||||
|
return (full_domain, ns, "NO RECORDS")
|
||||||
|
|
||||||
return (full_domain, ns, results)
|
return (full_domain, ns, results)
|
||||||
except (exception.Timeout, TimeoutError):
|
except (exception.Timeout, TimeoutError):
|
||||||
@@ -184,8 +194,8 @@ for full_domain in full_domains:
|
|||||||
provider = nameserver_map.get(ns)
|
provider = nameserver_map.get(ns)
|
||||||
if (full_domain, ns) in results_map:
|
if (full_domain, ns) in results_map:
|
||||||
results = results_map[(full_domain, ns)]
|
results = results_map[(full_domain, ns)]
|
||||||
# Handle error/timeout cases (strings starting with specific markers)
|
# Handle error/timeout/rcode cases (strings)
|
||||||
if isinstance(results, str) and (results == "TIMED OUT" or results.startswith("ERROR:")):
|
if isinstance(results, str):
|
||||||
output[full_domain]["records"][provider][ns] = results
|
output[full_domain]["records"][provider][ns] = results
|
||||||
else:
|
else:
|
||||||
results = sorted(results)
|
results = sorted(results)
|
||||||
@@ -196,8 +206,8 @@ for full_domain in full_domains:
|
|||||||
for ns in all_nameservers:
|
for ns in all_nameservers:
|
||||||
if (full_domain, ns) in results_map:
|
if (full_domain, ns) in results_map:
|
||||||
results = results_map[(full_domain, ns)]
|
results = results_map[(full_domain, ns)]
|
||||||
# Handle error/timeout cases (strings starting with specific markers)
|
# Handle error/timeout/rcode cases (strings)
|
||||||
if isinstance(results, str) and (results == "TIMED OUT" or results.startswith("ERROR:")):
|
if isinstance(results, str):
|
||||||
output[full_domain]["records"][ns] = results
|
output[full_domain]["records"][ns] = results
|
||||||
else:
|
else:
|
||||||
results = sorted(results)
|
results = sorted(results)
|
||||||
|
|||||||
Reference in New Issue
Block a user