用户想要更换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命令运行脚本以获得准确结果。希望这能帮助您!
评论已关闭