domain-list-community
domain-list-community copied to clipboard
关于域名数据有效性的想法
我编写了一个简单的脚本如下,它遍历本项目的域名数据,向各大 DNS 服务器发起针对 NS 类型记录的 DNS 查询,并输出成功与否(OK
, NXDOMAIN
, NoAnswer
)。
import dns.resolver
from pathlib import Path
data_path = Path(r"/home/REDACTED/domain-list-community/data")
c_resolver = dns.resolver.Resolver(configure=False)
c_resolver.retry_servfail = True
c_resolver.nameservers = ["https://cloudflare-dns.com/dns-query", "https://dns.google/dns-query", "https://dns.alidns.com/dns-query"]
for file in data_path.glob("*"):
if file.is_file():
with open(file, encoding="utf-8", mode="r") as content:
for line in content.readlines():
if line.startswith("include:") or line.startswith("regexp:") or line.startswith("#"):
continue
line_to_test = line.strip()
if line.startswith("full:"):
line_to_test = line.lstrip("full:").strip()
if "@" in line:
line_to_test = line.split("@")[0].strip()
if "#" in line:
line_to_test = line.split("#")[0].strip()
try:
c_resolver.resolve(line_to_test, 'NS', lifetime=10)
except dns.resolver.NXDOMAIN:
print(line_to_test + " NXDOMAIN")
except dns.resolver.NoAnswer:
print(line_to_test + " NoAnswer")
finally:
print(line_to_test + " OK")
由于本项目是用于分流网络流量的,因此,如果一个域名不能被任何人访问,那么它就没有存在于本项目的价值。在 PR #2139 中,我已经从 tld-!cn 中删除了占比约 1/4 的无效 TLD。
可能由于各大 DNS 服务器设置了速率限制,该脚本每当查询了约 200 个域名后就会因为收到 SERVFAIL 而停止,以下是一次运行的结果:https://pastebin.mozilla.org/pjXJRbF3
可以看到,在查询到的 184 个域名中,有 11 个域名的查询结果是 NXDOMAIN 或 No Answer。
尽管未能完整地遍历本项目数据,但该结果展现的无效数据占比已经应当引起注意。是否应该对本项目的已有数据进行持续或定时的监测,并自动删除无效数据?