-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy path060-subdomain-enumerator.py
40 lines (31 loc) · 1.42 KB
/
060-subdomain-enumerator.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import argparse
import concurrent.futures
import socket
## Run via cmd line like: python3 subdomain_enumerator.py example.com wordlist.txt
# List of popular DNS resolvers
resolvers = ["1.1.1.1", "8.8.8.8"]
def resolve(domain, subdomain, resolver):
"""Resolve a subdomain using a DNS resolver."""
try:
ip_address = socket.gethostbyname(f"{subdomain}.{domain}", resolver)
print(f"[{resolver}] {subdomain}.{domain}: {ip_address}")
except socket.gaierror:
pass
if __name__ == "__main__":
# Parse command-line arguments
parser = argparse.ArgumentParser(description="Enumerate subdomains.")
parser.add_argument("domain", help="The domain name to enumerate subdomains for.")
parser.add_argument("wordlist", help="The wordlist file containing subdomains to test.")
args = parser.parse_args()
# Load the wordlist file
with open(args.wordlist) as f:
subdomains = [line.strip() for line in f]
# Use multiple threads to test the subdomains against each resolver
with concurrent.futures.ThreadPoolExecutor() as executor:
# Submit each subdomain and resolver combination as a separate task to the executor
tasks = []
for subdomain in subdomains:
for resolver in resolvers:
tasks.append(executor.submit(resolve, args.domain, subdomain, resolver))
# Wait for all tasks to complete
concurrent.futures.wait(tasks)