Domain_Check/domain_check.py

142 lines
4.1 KiB
Python
Raw Normal View History

2024-08-19 06:05:50 +02:00
import os
import socket
import sys
import concurrent.futures
import time
import random
def domain_megabot(domain, no_match_pattern, whois_server):
retry_count = 0
while True:
response = whois_query(whois_server, domain)
if response:
if no_match_pattern in response:
print(f"{domain} AVAILABLE FOR REGISTRATION!")
with open("domain.txt", "a") as f:
f.write(f"{domain}\n")
else:
print(f"{domain} NOT AVAILABLE.")
# Add random delay to avoid triggering rate limits
time.sleep(random.uniform(1, 5))
break
else:
retry_count += 1
sleep_time = min(60, 2**retry_count + random.uniform(0, 1))
print(f"Retrying query for {domain} in {sleep_time:.2f} seconds...")
time.sleep(sleep_time)
def whois_query(server, query):
ip = hostname_to_ip(server)
if not ip:
print("FAILED TO RESOLVE HOSTNAME")
return ""
try:
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
s.settimeout(10)
s.connect((ip, 43))
s.sendall(f"{query}\r\n".encode())
response = b""
while True:
data = s.recv(4096)
if not data:
break
response += data
return response.decode()
except socket.error as err:
print(f"Error during WHOIS query: {err}")
return None
def hostname_to_ip(hostname):
try:
return socket.gethostbyname(hostname)
except socket.error as err:
print(f"Error resolving hostname: {err}")
return None
def str_split(s, delimiter):
return s.split(delimiter)
def str_conn(s1, s2):
return f"{s1}{s2}"
def main():
# Automatically read TLDs from the TLD_DATA file in the current directory
try:
with open("TLD_DATA", "r") as fp:
tld_data = fp.readlines()
except FileNotFoundError:
print("TLD DATABASE NOT FOUND!")
sys.exit(1)
# Automatically read domain extensions (TLDs) from the DOMAINS file
try:
with open("DOMAINS", "r") as fp:
exts = [line.strip() for line in fp.readlines() if line.strip()]
except FileNotFoundError:
print("DOMAINS FILE NOT FOUND!")
sys.exit(1)
# Load TLD information
tld_info = {}
for line in tld_data:
arr = str_split(line.strip(), "=")
if arr[0] in exts:
tld_info[arr[0]] = {
"whois_server": arr[1],
"no_match_pattern": arr[2],
}
if not tld_info:
print("NO VALID TLDs FOUND IN DOMAINS FILE!")
sys.exit(2)
# Automatically read the dictionary from the DICT file
try:
with open("DICT", "r") as fp_dict:
dictionary = fp_dict.readlines()
except FileNotFoundError:
print("DICTIONARY FILE NOT FOUND!")
sys.exit(3)
with open("domain.txt", "w") as fp_result:
fp_result.write(
"AVAILABLE DOMAIN NAME LIST:\n" "---------------------------------\n"
)
# Prepare domain names to check
domains = []
for line in dictionary:
domain_prefix = line.strip()
if domain_prefix:
for ext in exts:
domain = str_conn(str_conn(domain_prefix, "."), ext)
domains.append(
(
domain,
tld_info[ext]["no_match_pattern"],
tld_info[ext]["whois_server"],
)
)
# Use a thread pool to check multiple domains concurrently
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
futures = [
executor.submit(domain_megabot, domain, pattern, server)
for domain, pattern, server in domains
]
for future in concurrent.futures.as_completed(futures):
future.result() # Handle any exceptions in threads
print("TASK FINISHED! RESULTS SAVED TO domain.txt")
if __name__ == "__main__":
main()