如何用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
相关产品推荐
相关产品推荐

