撰于 阅读 49

选择最快的DNS服务器以避免运营商的DNS屏蔽

用户想要更换DNS服务器以避免运营商的DNS屏蔽某些网站。以下是一个Python脚本,用于测试多个DNS服务器的响应速度,并选择最快的DNS服务器。

import ping3
import sys
from statistics import mean

# 配置
PING_TIMEOUT = 1  # 单次 ping 超时时间(秒)
PING_COUNT = 6  # 每个IP尝试次数
dns_servers = [
    ("114DNS", "114.114.114.114", "2402:4e00::", "国内知名公共DNS"),
    ("114DNS", "114.114.115.115", "", ""),
    ("DNSPod DNS+", "119.29.29.29", "", "腾讯旗下,稳定性高"),
    ("DNSPod DNS+", "182.254.116.116", "2402:4e00::", ""),
    ("Google DNS", "8.8.8.8", "2001:4860:4860::8888", "全球广泛使用,速度快"),
    ("Google DNS", "8.8.4.4", "2001:4860:4860::8844", ""),
    ("Cloudflare DNS", "1.1.1.1", "2606:4700:4700::1111", "强调隐私保护,响应迅速"),
    ("Cloudflare DNS", "1.0.0.1", "2606:4700:4700::1001", ""),
    ("IBM Quad9 DNS", "9.9.9.9", "2620:fe::fe", "安全性高,防护恶意网站"),
    ("IBM Quad9 DNS", "", "2620:fe::9", ""),
    ("OpenDNS", "208.67.222.222", "2620:0:ccc::2", "提供内容过滤和安全防护"),
    ("OpenDNS", "208.67.220.220", "2620:0:ccd::2", ""),
    ("阿里云DNS", "223.5.5.5", "2400:3200::1", "国内大型云服务提供商"),
    ("阿里云DNS", "223.6.6.6", "2400:3200:baba::1", ""),
    ("腾讯云DNS", "183.60.83.19", """, "腾讯提供,稳定可靠"),
    ("腾讯云DNS", "183.60.82.98", """, ""),
    ("百度云DNS", "180.76.76.76", "2400:da00::6666", "百度提供,适合国内用户"),
    ("微软云DNS", "4.2.2.1", """, "微软提供,全球覆盖"),
    ("微软云DNS", "4.2.2.2", """, ""),
    ("华为云DNS", "122.112.208.1", """, "华为提供,稳定性强"),
    ("华为云DNS", "139.9.23.90", """, ""),
    ("中華電信DNS", "168.95.192.1", """, "台湾地区中華電信提供"),
    ("中華電信DNS", "168.95.1.1", """, ""),
    ("香港宽频DNS", "203.80.96.10", """, "香港地区提供"),
    ("香港宽频DNS", "203.80.96.9", """, ""),
    ("赛门铁克诺顿DNS", "199.85.126.10", """, "提供安全防护"),
    ("赛门铁克诺顿DNS", "199.85.127.10", """, ""),
    ("瑞士瑞信银行DNS", "64.6.64.6", """, "瑞士提供,安全性高"),
    ("瑞士瑞信银行DNS", "64.6.65.6", """, ""),
]

def ping_host_avg(ip, count=4, timeout=2):
    delays = []
    for _ in range(count):
        try:
            delay = ping3.ping(ip, timeout=timeout)
            if delay is not None:
                delays.append(delay * 1000)  # 转为毫秒
        except Exception:
            continue
    if not delays:
        return None
    return round(mean(delays), 2)

def main():
    results = []

    print(f"服务商     IP地址     平均延迟(ms)    备注------------------------------------------------------------------------")
    print("-")

    for provider, ipv4, ipv6, note in dns_servers:
        for ip in [ipv4, ipv6]:
            if not ip:
                continue
            avg_delay = ping_host_avg(ip, count=PING_COUNT, timeout=PING_TIMEOUT)
            status = f"{avg_delay:.2f}" if avg_delay is not None else "超时"
            results.append((provider, ip, avg_delay, note))
            print(f"{provider}    {ip}    {status}   {note}")

    successful = [(p, ip, d, n) for p, ip, d, n in results if d is not None]
    successful.sort(key=lambda x: x[2])

    print("✅ 响应最快的前5个 DNS 服务器(基于4次ping平均):")
    print("排名   服务商                   IP地址              平均延迟(ms)----------------------------------------------------------")
    for i, (p, ip, d, n) in enumerate(successful[:5], 1):
        print(f"{i}  {p}    {ip}    {d:.2f}")

if __name__ == "__main__":
    if sys.platform != "win32":
        import os
        if os.geteuid() != 0:
            print("⚠️  提示:在非 Windows 系统上,ping 可能需要 root 权限。")
            print("请使用 sudo 运行此脚本以获得准确结果。")
    main()

使用此脚本,您可以测试多个DNS服务器的响应速度,并选择最快的DNS服务器来避免运营商的DNS屏蔽某些网站。请确保您已经安装了 ping3 库,可以通过运行 pip install ping3 来安装。运行脚本时,请确保您有足够的权限执行ping操作。如果您在非Windows系统上运行脚本,可能需要root权限。使用sudo命令运行脚本以获得准确结果。希望这能帮助您!


评论已关闭