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

如何用Python实现Windows系统IPv4 DNS的设置与清除?

在Windows上用Python自动化设置/清除IPv4 DNS配置

直接用系统自带的netsh命令行工具是最可靠的方案,比操作注册表更简单且兼容性更好——注册表路径可能随Windows版本变动,且修改后常需重启适配器才生效,而netsh是官方支持的网络配置工具,即时生效。

步骤1:确定目标网络适配器名称

首先要知道你要修改的适配器名称(比如"以太网"、"WLAN"),可以通过以下Python代码获取所有可用适配器:

import subprocess

def get_adapters():
    result = subprocess.run(
        ["netsh", "interface", "show", "interface"],
        capture_output=True,
        text=True,
        check=True
    )
    # 解析输出,提取启用的适配器名称
    adapters = []
    for line in result.stdout.splitlines():
        if "Connected" in line or "Disconnected" in line:
            parts = line.split()
            # 名称可能包含空格,取最后几个字段拼接
            name = " ".join(parts[3:])
            adapters.append(name)
    return adapters

# 打印所有适配器
print(get_adapters())

步骤2:设置静态DNS

用subprocess调用netsh命令设置主DNS和备用DNS:

import subprocess

def set_static_dns(adapter_name, primary_dns, secondary_dns=None):
    # 设置主DNS
    cmd = ["netsh", "interface", "ipv4", "set", "dns", f"name={adapter_name}", "static", primary_dns]
    subprocess.run(cmd, check=True, capture_output=True, text=True)
    
    # 设置备用DNS(如果提供)
    if secondary_dns:
        cmd = ["netsh", "interface", "ipv4", "add", "dns", f"name={adapter_name}", secondary_dns, "index=2"]
        subprocess.run(cmd, check=True, capture_output=True, text=True)
    print(f"已为{adapter_name}设置DNS:主{primary_dns},备用{secondary_dns or '无'}")

# 示例:为"以太网"设置Google DNS
set_static_dns("以太网", "8.8.8.8", "8.8.4.4")

步骤3:清除DNS(恢复自动获取)

执行以下代码将DNS设置改回DHCP自动获取,并清除所有手动设置的DNS服务器:

import subprocess

def reset_dns_to_dhcp(adapter_name):
    # 恢复自动获取DNS
    cmd = ["netsh", "interface", "ipv4", "set", "dns", f"name={adapter_name}", "dhcp"]
    subprocess.run(cmd, check=True, capture_output=True, text=True)
    
    # 清除所有残留的手动DNS条目
    cmd = ["netsh", "interface", "ipv4", "delete", "dns", f"name={adapter_name}", "all"]
    subprocess.run(cmd, capture_output=True, text=True)  # 忽略无条目时的错误
    print(f"{adapter_name}的DNS已恢复为自动获取")

# 示例:恢复"以太网"的DNS自动获取
reset_dns_to_dhcp("以太网")

关键注意事项

  • 必须以管理员权限运行脚本:netsh修改网络配置需要管理员权限,否则会抛出权限错误。
  • 适配器名称要准确:如果名称包含空格,必须完整匹配(比如"WLAN 2"),可以用get_adapters()函数确认。
  • 错误处理:实际使用时建议添加try-except块捕获subprocess.CalledProcessError,处理命令执行失败的情况(比如适配器名称错误、权限不足)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:05:05