mckabue commited on
Commit
7fe6fd3
·
1 Parent(s): e398149

Enhance DNS availability check with random resolver selection and improved error logging

Browse files
Files changed (2) hide show
  1. app.py +32 -10
  2. 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
- for record_type in ['NS', 'A', 'AAAA', 'MX', 'CNAME']:
86
- try:
87
- dns.resolver.resolve(domain, record_type)
88
- return False, record_type, False
89
- except Exception as e:
90
- logs_append(f"{dns_is_available.__name__}:Exception:{str(e)}")
91
- continue
 
 
 
 
 
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.ai
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 at ToKnow.ai
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>