main.py 2.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. import argparse
  2. import string
  3. import itertools
  4. from entry import entry
  5. from namebench import namebench
  6. from bind import Bind
  7. from pdns import Pdns
  8. from nsd import Nsd
  9. from knot import Knot
  10. from yadifa import Yadifa
  11. if __name__ == '__main__':
  12. parser = argparse.ArgumentParser(description='Generate fake DNS zonefiles and corresponding namebench file')
  13. parser.add_argument('--subdomains', type=bool, default=True, help='Generate subdomains too')
  14. parser.add_argument('--postfix', type=str, default='.test', help='Domain postfix eg .test or .com')
  15. parser.add_argument('--no-namebench', type=bool, default=False, help='Skip generation of namebench file')
  16. parser.add_argument('--no-zonefile', type=bool, default=False, help='Skip generation of zonefiles')
  17. parser.add_argument('--dnssec', type=bool, default=False, help='Prepare generation for DNSSEC')
  18. parser.add_argument('program', metavar='P', type=str, help='Program to generate (BIND, PDNS, NSD, KNOT, YADIFA, *ALL*)')
  19. parser.add_argument('domains', metavar='N', type=int, help='Number of domains to generate')
  20. args = parser.parse_args()
  21. if args.dnssec is not False:
  22. args.dnssec = True
  23. else:
  24. args.dnssec = False
  25. print(args)
  26. chars = list(string.ascii_lowercase)
  27. names = list(itertools.product(chars, repeat=4))
  28. entries = list()
  29. for i in range(0, args.domains):
  30. domain = ''.join(names[i]) + args.postfix
  31. record = entry(domain)
  32. if(args.subdomains):
  33. record.add_subdomain(entry('www', 'A', '127.0.0.1'))
  34. record.add_subdomain(entry('sub', 'A', '127.0.0.2'))
  35. entries.append(record)
  36. print('Generated {0} DNS domains'.format(len(entries)))
  37. if not args.no_namebench:
  38. print('Creating namebench file \'namebench.txt\'')
  39. nb = namebench()
  40. for record in entries:
  41. nb.generate_to_buffer(record)
  42. nb.write_buffer()
  43. if not args.no_zonefile:
  44. programs = {
  45. 'BIND': Bind(entries),
  46. 'PDNS': Pdns(entries),
  47. 'NSD': Nsd(entries),
  48. 'KNOT': Knot(entries),
  49. 'YADIFA': Yadifa(entries),
  50. }
  51. if args.program == 'ALL':
  52. for i in programs:
  53. print('Creating zones for {0}'.format(i))
  54. programs[i].named(args.dnssec)
  55. programs[i].zones()
  56. else:
  57. p = programs.get(args.program, 'UNKNOWN')
  58. if p != 'UNKNOWN':
  59. p.named(args.dnssec)
  60. p.zones()
  61. else:
  62. print('Unknown program {0}'.format(args.program))
  63. print('Done')