在选择无污染DNS的过程中,免不了要对待选的DNS服务器进行延迟的测试,为了避免每次单独Ping一个地址,所以我整理了一个脚本,用于批量测试目标DNS服务器的延迟。
需要ping3依赖。保存为*.py文件,通过命令行运行,可替换IP地址为自己想要进行测速的DNS的IP地址,每个DNS的IP地址Ping次数为4,可根据自己需要在脚本中修改。
import asyncio
from ping3 import ping
from concurrent.futures import ThreadPoolExecutor
# 定义要测试的地址列表
addresses = [
"223.5.5.5",
"8.8.8.8", "8.8.4.4",
"1.1.1.1", "1.0.0.1",
"9.9.9.9", "149.112.112.112",
"94.140.14.14", "94.140.15.15",
"45.90.28.0", "45.90.30.0",
"208.67.222.222", "208.67.220.220",
"77.88.8.8", "77.88.8.1",
"185.228.168.9", "185.228.169.9",
"172.104.93.80",
"8.26.56.26",
"84.200.69.80",
"46.250.226.242",
"2407:3640:2205:1668::1",
"185.228.168.9",
"185.228.169.9",
"76.76.2.1",
"78.47.212.211"
]
# 定义 Ping 测试函数
def test_ping(address):
try:
latency = ping(address, timeout=2) # 设置超时时间为 2 秒
if latency is not None:
return address, round(latency * 1000, 2) # 将秒转换为毫秒
else:
return address, "Failed"
except Exception as e:
return address, f"Error: {e}"
# 并发执行 Ping 测试
async def run_concurrent_ping():
with ThreadPoolExecutor(max_workers=20) as executor: # 设置最大并发数为 20
loop = asyncio.get_event_loop()
futures = [loop.run_in_executor(executor, test_ping, address) for address in addresses]
results = await asyncio.gather(*futures)
return results
# 主函数
async def main():
print("Starting Ping tests...")
results = await run_concurrent_ping()
print("\nPing results:")
print("-" * 40)
print(f"{'Address':<20} {'Latency (ms)':<10}")
print("-" * 40)
for address, latency in results:
print(f"{address:<20} {latency:<10}")
# 运行主函数
if __name__ == "__main__":
asyncio.run(main())
更多国内外DNS服务的推荐,可以查看这篇文章:国内外DNS推荐列表 | Homelab Dolingou Network
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。