- By test - In 战绩榜
【实用小工具】快速设置 DNS 服务器地址
最近单位网络环境变动,DNS 服务器地址也发生了变化。原以为在核心交换机上修改了 DNS 地址, 终端PC也会自动下发。没想到好多终端PC原先手动设置了旧的DNS 地址,导致出了经典的“能上微信,不能浏览网站”的问题。
没办法,只能帮着改 DNS 地址。机器还挺多,手动改太麻烦了。于是,我写了一个小工具,用来快速设置 DNS 服务器地址。
先说说修改dns的几种方案:
手动方案
控制面板 –> 网络和Internet –> 更改适配器设置 –> 右键如"本地连接"(已启用的网络连接) –> 属性 –> Internet 协议版本 4(TCP/IPv4) –> 设置DNS(自动或输入IP)。
我感觉这个操作虽然繁琐,但是比较简单。不过我司是做高科技转换的,显然不会用这个低科技了。不夸张的说,好多同事连“控制面板”都找不到,也懒得找,就等着IT人员上门服务。
软件方案
现成的软件有好多,好处就是可以省去“手动方案”的前期动作,直接设置DNS。
Dns Jumper v2.3 - A Free DNS Changer
Zaczero/DNSChanger: 🔧 The ultimate Windows DNS changer tool (with DNSCrypt)
这两个工具界面都非常的简洁,功能绝对够用。缺点是还要手动输入DNS的服务器IP,而且是英文,也要一点学习时间。
批处理文件(.bat)
批处理文件(batch file)包含一系列 DOS命令,通常用于自动执行重复性任务。用户只需双击批处理文件便可执行任务,而无需重复输入相同指令。
这里有很多适用的脚本:
aDarkDev/DNSChanger-Win: Batch File for Change Windows dns easy.
类似脚本还有: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写还是比较直观的,两个步骤:
找到已启用的网络连接 get_active_interfaces
设置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 文件。
打包的时候,选择 单文件,并设置一个图标。
这样,只要右击 dns-changer.exe,选择 以管理员身份运行 即可。
当然,缺点也很明显。
一是文件比较大,原本几十行代码,打包就变成7M多了。
二是不够灵活,不能随时修改DNS地址。
所以,如果熟悉PowerShell的话,还是推荐用PowerShell脚本。
你有什么更好的方法吗?欢迎留言。
参考资料
S7003如何修改VLAN的DNS,详细一点的步骤 - 知了社区
Windows如何修改DNS - 知乎

