domain-list-community icon indicating copy to clipboard operation
domain-list-community copied to clipboard

关于域名数据有效性的想法

Open xkww3n opened this issue 8 months ago • 1 comments

我编写了一个简单的脚本如下,它遍历本项目的域名数据,向各大 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。

尽管未能完整地遍历本项目数据,但该结果展现的无效数据占比已经应当引起注意。是否应该对本项目的已有数据进行持续或定时的监测,并自动删除无效数据?

xkww3n avatar Jun 17 '24 15:06 xkww3n