30 lines
810 B
Python
Executable File
30 lines
810 B
Python
Executable File
#!/usr/bin/env python3
|
|
import asyncio
|
|
import socket
|
|
from keyword import kwlist
|
|
|
|
MAX_KEYWORD_LEN = 4 # <1>
|
|
|
|
|
|
async def probe(domain: str) -> tuple[str, bool]: # <2>
|
|
loop = asyncio.get_running_loop() # <3>
|
|
try:
|
|
await loop.getaddrinfo(domain, None) # <4>
|
|
except socket.gaierror:
|
|
return (domain, False)
|
|
return (domain, True)
|
|
|
|
|
|
async def main() -> None: # <5>
|
|
names = (kw for kw in kwlist if len(kw) <= MAX_KEYWORD_LEN) # <6>
|
|
domains = (f'{name}.dev'.lower() for name in names) # <7>
|
|
coros = [probe(domain) for domain in domains] # <8>
|
|
for coro in asyncio.as_completed(coros): # <9>
|
|
domain, found = await coro # <10>
|
|
mark = '+' if found else ' '
|
|
print(f'{mark} {domain}')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
asyncio.run(main()) # <11>
|