@@ -222,6 +222,31 @@ def get_dmarc(target):
222
222
except :
223
223
return
224
224
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
+
225
250
def get_mx (target ):
226
251
out .verbose ("Getting MX records" )
227
252
try :
@@ -415,6 +440,7 @@ def setup():
415
440
get_v6 (target )
416
441
get_txt (target )
417
442
get_dmarc (target )
443
+ get_dnssec (target , resolver .nameservers [0 ])
418
444
get_mx (target )
419
445
wildcard = get_wildcard (target )
420
446
if wildcard :
0 commit comments