Please enable Javascript to view the contents

【实用小工具】快速设置 DNS 服务器地址

 ·  ☕ 3 分钟

最近单位网络环境变动,DNS 服务器地址也发生了变化。原以为在核心交换机上修改了 DNS 地址, 终端PC也会自动下发。没想到好多终端PC原先手动设置了旧的DNS 地址,导致出了经典的“能上微信,不能浏览网站”的问题。

没办法,只能帮着改 DNS 地址。机器还挺多,手动改太麻烦了。于是,我写了一个小工具,用来快速设置 DNS 服务器地址。

先说说修改dns的几种方案:

手动方案

控制面板 –> 网络和Internet –> 更改适配器设置 –> 右键如"本地连接"(已启用的网络连接) –> 属性 –> Internet 协议版本 4(TCP/IPv4) –> 设置DNS(自动或输入IP)。

Windows PC设置DNS

我感觉这个操作虽然繁琐,但是比较简单。不过我司是做高科技转换的,显然不会用这个低科技了。不夸张的说,好多同事连“控制面板”都找不到,也懒得找,就等着IT人员上门服务。

软件方案

现成的软件有好多,好处就是可以省去“手动方案”的前期动作,直接设置DNS。

Dns Jumper v2.3 - A Free DNS Changer

Dns Jumper

Zaczero/DNSChanger: 🔧 The ultimate Windows DNS changer tool (with DNSCrypt)

DNSChanger

这两个工具界面都非常的简洁,功能绝对够用。缺点是还要手动输入DNS的服务器IP,而且是英文,也要一点学习时间。

批处理文件(.bat)

批处理文件(batch file)包含一系列 DOS命令,通常用于自动执行重复性任务。用户只需双击批处理文件便可执行任务,而无需重复输入相同指令。

这里有很多适用的脚本:

aDarkDev/DNSChanger-Win: Batch File for Change Windows dns easy.

修改DNS批处理文件

类似脚本还有:MansourM/ez-dns-changer.bat: Easy (EZ) DNS changer, A simple windows batch script file to change windows dns servers

这些脚本非常好用,但需要管理员权限,也有软件方案同样的问题。我想改改用着,但奈何不太了解PowerShell的语法,一时还没搞出来。

所以,最后还是自己写一个Python脚本,把DNS地址的硬编码在程序里面,打包成Exe文件,大家点击一下就行了。

python

用Python写还是比较直观的,两个步骤:

  1. 找到已启用的网络连接 get_active_interfaces
  2. 设置DNS set_dns_servers
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import psutil
import subprocess

def get_active_interfaces():
    active_interfaces = []
    net_stats = psutil.net_if_stats()
    for interface, stats in net_stats.items():
        if stats.isup:
            active_interfaces.append(interface)
    return active_interfaces

def set_dns_servers(interface, dns_servers):
    # 设置主DNS服务器
    command = f'netsh interface ip set dns name="{interface}" static {dns_servers[0]}'
    subprocess.run(command, shell=True)
    
    # 设置备用DNS服务器
    for index, dns in enumerate(dns_servers[1:], start=2):
        command = f'netsh interface ip add dns name="{interface}" {dns} index={index}'
        subprocess.run(command, shell=True)

def main():
    dns_servers = ["120.196.165.24", "120.196.165.7"] # 要设置的DNS服务器地址
    
    active_interfaces = get_active_interfaces()

    if not active_interfaces:
        print("No active network interfaces found.")
        return

    for interface in active_interfaces:
        print(f"Setting DNS for {interface}")
        set_dns_servers(interface, dns_servers)
        print(f"DNS for {interface} set to {dns_servers}")

if __name__ == "__main__":
    main()

其中 psutil 是一个跨平台的 Python 库,用于检索系统和进程的运行信息。它提供了对系统资源(如 CPU、内存、磁盘、网络等)的访问,并允许管理和监控系统进程。这里用它获取网络接口和连接信息。

可用 pip 安装 psutil

1
pip install psutil

auto-py-to-exe

auto-py-to-exe 将上面的脚本打包成 exe 文件。

auto-py-to-exe 打包

打包的时候,选择 单文件,并设置一个图标。

打包完成

这样,只要右击 dns-changer.exe,选择 以管理员身份运行 即可。

当然,缺点也很明显。

一是文件比较大,原本几十行代码,打包就变成7M多了。

二是不够灵活,不能随时修改DNS地址。

所以,如果熟悉PowerShell的话,还是推荐用PowerShell脚本。

你有什么更好的方法吗?欢迎留言。

参考资料

S7003如何修改VLAN的DNS,详细一点的步骤 - 知了社区

Windows如何修改DNS - 知乎

分享

码中人
作者
码中人
Web Developer