Skip to content

Commit b0b2047

Browse files
committedApr 13, 2021
Add check for DNSSEC status
1 parent 145f0d6 commit b0b2047

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed
 

‎dnscan.py

+26
Original file line numberDiff line numberDiff line change
@@ -222,6 +222,31 @@ def get_dmarc(target):
222222
except:
223223
return
224224

225+
def get_dnssec(target, nameserver):
226+
out.verbose("Checking DNSSEC")
227+
request = dns.message.make_query(target, dns.rdatatype.DNSKEY, want_dnssec=True)
228+
response = dns.query.udp(request, nameserver)
229+
if response.rcode() != 0:
230+
out.warn("DNSKEY lookup returned error code " + str(response.rcode))
231+
else:
232+
answer = response.answer
233+
if len(answer) == 0:
234+
out.warn("DNSSEC not supported\n")
235+
elif len(answer) != 2:
236+
out.warn("Invalid DNSKEY record length\n")
237+
else:
238+
name = dns.name.from_text(target)
239+
try:
240+
dns.dnssec.validate(answer[0],answer[1],{name:answer[0]})
241+
except dns.dnssec.ValidationFailure:
242+
out.warn("DNSSEC key validation failed\n")
243+
else:
244+
out.good("DNSSEC enabled and validated")
245+
dnssec_values = str(answer[0][0]).split(' ')
246+
algorithm_int = int(dnssec_values[2])
247+
algorithm_str = dns.dnssec.algorithm_to_text(algorithm_int)
248+
print("Algorithm = " + algorithm_str + " (" + str(algorithm_int) + ")\n")
249+
225250
def get_mx(target):
226251
out.verbose("Getting MX records")
227252
try:
@@ -415,6 +440,7 @@ def setup():
415440
get_v6(target)
416441
get_txt(target)
417442
get_dmarc(target)
443+
get_dnssec(target, resolver.nameservers[0])
418444
get_mx(target)
419445
wildcard = get_wildcard(target)
420446
if wildcard:

0 commit comments

Comments
 (0)
Please sign in to comment.