You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python替换批处理文件中的DNS地址,实现DNS切换与延迟测试?

解决方法

步骤1:将批处理改为模板文件

把原批处理里固定的1.1.1.1替换成占位符{DNS_ADDRESS},保存为dns_template.bat:

@echo off
cls
for /F "skip=3 tokens=1,2,3* delims= " %%G in ('netsh interface show interface') DO (
    IF "%%H"=="Disconnected" netsh interface set interface "%%J" enabled
    IF "%%H"=="Connected" netsh interface set interface "%%J" enabled
    echo %%J
    netsh interface ip set dns %%J static {DNS_ADDRESS}
)

步骤2:编写Python逻辑实现自动替换与测试

在原Python脚本基础上,添加读取模板、替换DNS、执行批处理、循环测试的逻辑:

from tcp_latency import measure_latency
import subprocess
import os

host = input("Enter host: ")

def pinger():
    try:
        latency_list = measure_latency(host, port=80, runs=10, timeout=2.5)
        # 过滤超时产生的None值
        valid_latencies = [lat for lat in latency_list if lat is not None]
        if not valid_latencies:
            return "Timeout"
        avg_latency = sum(valid_latencies) / len(valid_latencies)
        return round(avg_latency, 2)
    except Exception as e:
        return f"Error: {str(e)}"

# DNS地址列表
dns_list = ["1.1.1.1","1.0.0.1","8.8.8.8","8.8.4.4","9.9.9.9","149.112.112.112","208.67.222.222","208.67.220.220","8.26.56.26","8.20.247.20","185.228.168.9","185.228.169.9"]
# 批处理模板路径
template_path = "dns_template.bat"
# 临时批处理文件名
temp_batch = "temp_dns_switch.bat"

# 存储测试结果
results = []

for dns in dns_list:
    print(f"\n正在切换DNS到: {dns}")
    # 读取模板并替换DNS占位符
    with open(template_path, 'r', encoding='gbk') as f:
        batch_content = f.read().replace("{DNS_ADDRESS}", dns)
    # 写入临时批处理文件
    with open(temp_batch, 'w', encoding='gbk') as f:
        f.write(batch_content)
    # 执行批处理(需管理员权限)
    subprocess.run([temp_batch], shell=True, check=True)
    # 测试延迟
    latency = pinger()
    print(f"DNS {dns} 的平均延迟: {latency} ms")
    results.append((dns, latency))

# 清理临时文件
if os.path.exists(temp_batch):
    os.remove(temp_batch)

# 输出所有结果对比
print("\n=== 所有DNS延迟测试结果 ===")
for dns, latency in results:
    print(f"DNS {dns}: {latency} ms")

关键注意事项

  • 必须以管理员身份运行Python脚本,否则netsh命令无权限修改DNS设置。
  • 批处理文件用gbk编码是适配Windows CMD默认编码,避免乱码。
  • 加入了超时值过滤,避免measure_latency返回None导致计算错误。

内容的提问来源于stack exchange,提问作者itzowo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 10:10:28