#!/usr/bin/python3 import json import os import re import subprocess import argparse path = os.path.dirname(os.path.abspath(__file__)) try: with open(path + '/dnssec_domains.json') as dnssec_zones: zones = json.load(dnssec_zones) except: zones = [] if __name__ == '__main__': parser = argparse.ArgumentParser(description="Gestion de DNSSEC") parser.add_argument('-v', '--verbose', help="Mode verbeux", action="store_true") args = parser.parse_args() verbose = args.verbose ds_records = {} for zone in zones: if verbose: print("Getting CDS of %s:" % (zone,)) print("/usr/sbin/knotcs zone-read %s @ CDS" % (zone,)) cdss = subprocess.check_output(['/usr/sbin/knotc', 'zone-read', zone, '@', 'CDS'])[:-1].decode('utf-8').split('\n') if verbose: print("CDS of %s = %s" % (zone, cdss)) for cds in cdss: ds = {} try: cds = cds.split(' ') ds['subzone'] = cds[1] ds['id'] = cds[4] ds['algo'] = cds[5] ds['type'] = cds[6] ds['fp'] = cds[7] except: print('Unable to find ksk for', zone) continue ds['ttl'] = 172800 if not zone in ds_records: ds_records[zone] = [] ds_records[zone].append(ds) if verbose: print("DS record of %s : %s" % (zone, ds)) print("\n\n") with open('dnssec.json', 'w') as dnssec: json.dump(ds_records, dnssec)