Enhance DNS availability check with random resolver selection and improved error logging
Browse files- app.py +32 -10
- index.html +2 -2
app.py
CHANGED
@@ -1,11 +1,10 @@
|
|
|
|
1 |
from typing import Callable
|
2 |
from flask import Flask, send_from_directory
|
3 |
-
import dns.resolver
|
4 |
-
import socket
|
5 |
-
import requests
|
6 |
from urllib.parse import urlparse
|
7 |
import dns.resolver
|
8 |
import socket
|
|
|
9 |
import platform
|
10 |
import subprocess
|
11 |
from shutil import which
|
@@ -82,15 +81,38 @@ def check_domain_availability(domain, logs_append: Callable[[str], None]):
|
|
82 |
def dns_is_available(domain, logs_append: Callable[[str], None]):
|
83 |
"""Check if domain exists in DNS by looking for common record types."""
|
84 |
# Check NS records first as they're required for valid domains
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
|
|
|
|
|
|
|
|
|
|
92 |
return True, None, True
|
93 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
94 |
def rdap_is_available(domain, logs_append: Callable[[str], None]):
|
95 |
try:
|
96 |
bootstrap_url = "https://data.iana.org/rdap/dns.json"
|
|
|
1 |
+
import random
|
2 |
from typing import Callable
|
3 |
from flask import Flask, send_from_directory
|
|
|
|
|
|
|
4 |
from urllib.parse import urlparse
|
5 |
import dns.resolver
|
6 |
import socket
|
7 |
+
import requests
|
8 |
import platform
|
9 |
import subprocess
|
10 |
from shutil import which
|
|
|
81 |
def dns_is_available(domain, logs_append: Callable[[str], None]):
|
82 |
"""Check if domain exists in DNS by looking for common record types."""
|
83 |
# Check NS records first as they're required for valid domains
|
84 |
+
try:
|
85 |
+
resolver = get_dns_resolver()
|
86 |
+
resolver_nameservers = resolver.nameservers
|
87 |
+
for record_type in ['NS', 'A', 'AAAA', 'MX', 'CNAME']:
|
88 |
+
resolver_nameservers = []
|
89 |
+
try:
|
90 |
+
resolver.resolve(domain, record_type)
|
91 |
+
return False, record_type, False
|
92 |
+
except Exception as e:
|
93 |
+
logs_append(f"{dns_is_available.__name__}:Exception:{'|'.join(resolver_nameservers)}:{str(e)}")
|
94 |
+
except Exception as e:
|
95 |
+
logs_append(f"{dns_is_available.__name__}:Exception:{'|'.join(resolver_nameservers)}:{str(e)}")
|
96 |
return True, None, True
|
97 |
|
98 |
+
def get_dns_resolver():
|
99 |
+
# list of major DNS resolvers
|
100 |
+
resolver = dns.resolver.Resolver()
|
101 |
+
def myshuffle(ls):
|
102 |
+
random.shuffle(ls)
|
103 |
+
return ls
|
104 |
+
namesevers = {
|
105 |
+
'cloudflare': myshuffle(['1.1.1.1', '1.0.0.1']),
|
106 |
+
'google': myshuffle(['8.8.8.8', '8.8.4.4']),
|
107 |
+
'quad9': myshuffle(['9.9.9.9', '149.112.112.112']),
|
108 |
+
'opendns': myshuffle(['208.67.222.222', '208.67.220.220']),
|
109 |
+
'adguard': myshuffle(['94.140.14.14', '94.140.15.15']),
|
110 |
+
'nextdns': myshuffle(['45.90.28.167', '45.90.30.167']),
|
111 |
+
'default': myshuffle(resolver.nameservers)
|
112 |
+
}
|
113 |
+
resolver.nameservers = random.choice(list(namesevers.values()))
|
114 |
+
return resolver
|
115 |
+
|
116 |
def rdap_is_available(domain, logs_append: Callable[[str], None]):
|
117 |
try:
|
118 |
bootstrap_url = "https://data.iana.org/rdap/dns.json"
|
index.html
CHANGED
@@ -16,7 +16,7 @@
|
|
16 |
<h3 class="text-center">Private Domain Checker</h3>
|
17 |
<p class="text-center text-body-secondary">
|
18 |
<a href="https://toknow.ai" class="text-decoration-none text-reset">
|
19 |
-
ToKnow
|
20 |
</a>
|
21 |
</p>
|
22 |
<form id="searchForm" class="mb-3 mt-4">
|
@@ -31,7 +31,7 @@
|
|
31 |
</div>
|
32 |
<p class="text-center text-body-secondary mt-4">
|
33 |
<a href="https://toknow.ai/about" class="text-decoration-none">
|
34 |
-
Get help
|
35 |
</a>
|
36 |
</p>
|
37 |
</div>
|
|
|
16 |
<h3 class="text-center">Private Domain Checker</h3>
|
17 |
<p class="text-center text-body-secondary">
|
18 |
<a href="https://toknow.ai" class="text-decoration-none text-reset">
|
19 |
+
<b><u>ToKnow</u></b>.ai
|
20 |
</a>
|
21 |
</p>
|
22 |
<form id="searchForm" class="mb-3 mt-4">
|
|
|
31 |
</div>
|
32 |
<p class="text-center text-body-secondary mt-4">
|
33 |
<a href="https://toknow.ai/about" class="text-decoration-none">
|
34 |
+
<i>Get help</i>
|
35 |
</a>
|
36 |
</p>
|
37 |
</div>
|