Created
January 28, 2024 22:50
-
-
Save johnjosephhorton/1065183ac558852c9bfa52cac81bbf91 to your computer and use it in GitHub Desktop.
A script to search for english word domain names that might be available
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import aiohttp | |
import asyncio | |
http_status_codes = { | |
100: "Continue", | |
101: "Switching Protocols", | |
102: "Processing", | |
200: "OK", | |
201: "Created", | |
202: "Accepted", | |
203: "Non-Authoritative Information", | |
204: "No Content", | |
205: "Reset Content", | |
206: "Partial Content", | |
207: "Multi-Status", | |
300: "Multiple Choices", | |
301: "Moved Permanently", | |
302: "Found", | |
303: "See Other", | |
304: "Not Modified", | |
305: "Use Proxy", | |
307: "Temporary Redirect", | |
308: "Permanent Redirect", | |
400: "Bad Request", | |
401: "Unauthorized", | |
402: "Payment Required", | |
403: "Forbidden", | |
404: "Not Found", | |
405: "Method Not Allowed", | |
406: "Not Acceptable", | |
407: "Proxy Authentication Required", | |
408: "Request Timeout", | |
409: "Conflict", | |
410: "Gone", | |
411: "Length Required", | |
412: "Precondition Failed", | |
413: "Payload Too Large", | |
414: "URI Too Long", | |
415: "Unsupported Media Type", | |
416: "Range Not Satisfiable", | |
417: "Expectation Failed", | |
418: "I'm a teapot", # This is a real status code, defined in RFC 2324! | |
422: "Unprocessable Entity", | |
423: "Locked", | |
424: "Failed Dependency", | |
425: "Too Early", | |
426: "Upgrade Required", | |
428: "Precondition Required", | |
429: "Too Many Requests", | |
431: "Request Header Fields Too Large", | |
451: "Unavailable For Legal Reasons", | |
500: "Internal Server Error", | |
501: "Not Implemented", | |
502: "Bad Gateway", | |
503: "Service Unavailable", | |
504: "Gateway Timeout", | |
505: "HTTP Version Not Supported", | |
506: "Variant Also Negotiates", | |
507: "Insufficient Storage", | |
508: "Loop Detected", | |
510: "Not Extended", | |
511: "Network Authentication Required", | |
} | |
async def record_response(key): | |
url = f"http://www.{key}.com" | |
async with aiohttp.ClientSession() as session: | |
async with session.get(url) as response: | |
return response.status | |
def filter_words(file_path): | |
with open(file_path, "r") as file: | |
for line in file: | |
word = line.strip().lower() | |
# Remove any trailing whitespace or newline characters | |
if ( | |
not "_" in word | |
and "'" not in word | |
): | |
yield word | |
words_to_check = list(filter_words("/usr/share/dict/words")) | |
print(f"Checking {len(words_to_check)} words...") | |
async def main(): | |
tasks = [record_response(word) for word in words_to_check] | |
results = await asyncio.gather(*tasks, return_exceptions=True) | |
return results | |
if __name__ == "__main__": | |
# Run the async main function | |
results = asyncio.run(main()) | |
import csv | |
with open("results.csv", "w") as file: | |
writer = csv.writer(file) | |
writer.writerow(["word", "code", "exception", "description"]) | |
for word, result in zip(words_to_check, results): | |
if isinstance(result, Exception): | |
writer.writerow([word, result, True, "NA"]) | |
else: | |
writer.writerow( | |
[word, result, False, http_status_codes.get(result, "Unknown")] | |
) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment