Advertisement
Guest User

Untitled

a guest
Aug 22nd, 2017
441
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.53 KB | None | 0 0
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3.  
  4. #####
  5. # name: bulk-resolver.py
  6. # author: daniel isaksen <d@duniel.no>
  7. # purpose: pentesting
  8. # description:
  9. # bulk resolve FQDNs to IP addresses
  10. # dependencies
  11. # dnspython
  12. #####
  13.  
  14. import sys
  15. import json
  16. import os.path
  17. import argparse
  18.  
  19. try:
  20. import dns.exception
  21.  
  22. import dns.resolver
  23. resolver = dns.resolver.Resolver()
  24. resolver.timeout = 5
  25. resolver.lifetime = 5
  26. except:
  27. print("[ERR] You need to install the dependency dnspython!")
  28. sys.exit(1)
  29.  
  30. def resolve(host, verbose):
  31. try:
  32. return list(str(y) for y in resolver.query(host, "A"))
  33. except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN, dns.exception.Timeout) as e:
  34. if verbose:
  35. print("[DBG] failure resolving {0}: {1}".format(host, str(e)))
  36.  
  37. def prettyprint(type_, data):
  38. if type_ == "grep":
  39. for host, ips in data.items():
  40. for ip in ips:
  41. print("Hostname: {0}\tIP address: {1}".format(host, ip))
  42. elif type_ == "json":
  43. print(json.dumps(data, indent=4))
  44. elif type_ == "xml":
  45. print('<?xml version="1.0" encoding="UTF-8" ?>')
  46. print("<results>")
  47. for host, ips in data.items():
  48. print("\t<result>")
  49. print("\t\t<hostname>{}</hostname>".format(host))
  50. for ip in ips:
  51. print("\t\t<ip_address>{}</ip_address>".format(ip))
  52. print("\t</result>")
  53. print("</results>")
  54.  
  55. if __name__ == "__main__":
  56. parser = argparse.ArgumentParser("bulk-resolver.py", description="Bulk resolve domain names")
  57.  
  58. parser.add_argument("host", type=str, nargs="*", help="Space or newline separated list of hosts to resolve")
  59. parser.add_argument("-f", "--file", type=str, help="File containing hosts to check")
  60. parser.add_argument("-o", "--output-format", type=str, default="grep", choices=["grep, json, xml"])
  61. parser.add_argument("-v", "--verbose", action="store_true", default=False, help="Verbose mode (debug)")
  62.  
  63. args = parser.parse_args()
  64.  
  65. hosts = []
  66.  
  67. if args.host:
  68. for host in args.host:
  69. hosts.append(host)
  70.  
  71. if args.file:
  72. try:
  73. with open(args.file, "r") as f:
  74. f = f.read()
  75.  
  76. if len(f.split()) > 1:
  77. for host in f.split():
  78. hosts.append(host)
  79. elif len(f.split("\n")):
  80. for host in f.split("\n"):
  81. if host: # avoid newline
  82. hosts.append(host)
  83. except Exception as e:
  84. print("[ERR] File {} could not be read.".format(args.file))
  85. sys.exit(1)
  86.  
  87. if not hosts:
  88. parser.print_help()
  89. sys.exit(1)
  90.  
  91. ret = {}
  92.  
  93. for host in hosts:
  94. ips = resolve(host, args.verbose)
  95.  
  96. if ips:
  97. ret[host] = ips
  98.  
  99. if not ret:
  100. print("[ERR] None of the specified hosts could be resolved.")
  101. sys.exit(0)
  102.  
  103. prettyprint(args.output_format, ret)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement