Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python3
- # -*- coding: utf-8 -*-
- #####
- # name: bulk-resolver.py
- # author: daniel isaksen <d@duniel.no>
- # purpose: pentesting
- # description:
- # bulk resolve FQDNs to IP addresses
- # dependencies
- # dnspython
- #####
- import sys
- import json
- import os.path
- import argparse
- try:
- import dns.exception
- import dns.resolver
- resolver = dns.resolver.Resolver()
- resolver.timeout = 5
- resolver.lifetime = 5
- except:
- print("[ERR] You need to install the dependency dnspython!")
- sys.exit(1)
- def resolve(host, verbose):
- try:
- return list(str(y) for y in resolver.query(host, "A"))
- except (dns.resolver.NoAnswer, dns.resolver.NXDOMAIN, dns.exception.Timeout) as e:
- if verbose:
- print("[DBG] failure resolving {0}: {1}".format(host, str(e)))
- def prettyprint(type_, data):
- if type_ == "grep":
- for host, ips in data.items():
- for ip in ips:
- print("Hostname: {0}\tIP address: {1}".format(host, ip))
- elif type_ == "json":
- print(json.dumps(data, indent=4))
- elif type_ == "xml":
- print('<?xml version="1.0" encoding="UTF-8" ?>')
- print("<results>")
- for host, ips in data.items():
- print("\t<result>")
- print("\t\t<hostname>{}</hostname>".format(host))
- for ip in ips:
- print("\t\t<ip_address>{}</ip_address>".format(ip))
- print("\t</result>")
- print("</results>")
- if __name__ == "__main__":
- parser = argparse.ArgumentParser("bulk-resolver.py", description="Bulk resolve domain names")
- parser.add_argument("host", type=str, nargs="*", help="Space or newline separated list of hosts to resolve")
- parser.add_argument("-f", "--file", type=str, help="File containing hosts to check")
- parser.add_argument("-o", "--output-format", type=str, default="grep", choices=["grep, json, xml"])
- parser.add_argument("-v", "--verbose", action="store_true", default=False, help="Verbose mode (debug)")
- args = parser.parse_args()
- hosts = []
- if args.host:
- for host in args.host:
- hosts.append(host)
- if args.file:
- try:
- with open(args.file, "r") as f:
- f = f.read()
- if len(f.split()) > 1:
- for host in f.split():
- hosts.append(host)
- elif len(f.split("\n")):
- for host in f.split("\n"):
- if host: # avoid newline
- hosts.append(host)
- except Exception as e:
- print("[ERR] File {} could not be read.".format(args.file))
- sys.exit(1)
- if not hosts:
- parser.print_help()
- sys.exit(1)
- ret = {}
- for host in hosts:
- ips = resolve(host, args.verbose)
- if ips:
- ret[host] = ips
- if not ret:
- print("[ERR] None of the specified hosts could be resolved.")
- sys.exit(0)
- prettyprint(args.output_format, ret)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement