本文目录导读:

清理DNS缓存的自动化脚本因操作系统不同而有所差异,以下是针对 Windows、macOS 和 Linux 的常见方法,你可以根据系统选择对应的脚本或命令。
Windows 系统
Windows 系统通过 ipconfig /flushdns 命令刷新缓存,以下是批处理脚本(.bat)和 PowerShell 脚本的示例。
批处理脚本 (.bat)
创建一个文本文件,复制以下代码,保存为 flush_dns.bat,然后右键以管理员身份运行。
@echo off echo 正在清理 DNS 缓存... ipconfig /flushdns echo DNS 缓存清理完成。 pause
PowerShell 脚本 (.ps1)
创建 .ps1 文件,内容如下,运行前可能需要先设置执行策略(Set-ExecutionPolicy Unrestricted 或 -ExecutionPolicy Bypass)。
Write-Host "正在清理 DNS 缓存..." -ForegroundColor Green Clear-DnsClientCache Write-Host "DNS 缓存清理完成。" -ForegroundColor Green
注意:
Clear-DnsClientCache通常是ipconfig /flushdns的 PowerShell 等效项,如果该命令不可用,可使用Start-Process -FilePath "ipconfig" -ArgumentList "/flushdns" -Verb RunAs。
macOS 系统
macOS 清理 DNS 缓存的命令因系统版本而异,以下是常见的 Bash/Zsh 脚本。
创建一个可执行脚本文件(如 flush_dns_mac.sh):
#!/bin/bash
echo "正在清理 macOS DNS 缓存..."
# 根据 macOS 版本执行不同命令
if [[ $(sw_vers -productVersion) == 10.4* ]]; then
lookupd -flushcache
elif [[ $(sw_vers -productVersion) == 10.5* ]] || [[ $(sw_vers -productVersion) == 10.6* ]]; then
dscacheutil -flushcache
sudo killall -HUP mDNSResponder
elif [[ $(sw_vers -productVersion) == 10.7* ]] || [[ $(sw_vers -productVersion) == 10.8* ]] || [[ $(sw_vers -productVersion) == 10.9* ]]; then
sudo killall -HUP mDNSResponder
elif [[ $(sw_vers -productVersion) == 10.10* ]] || [[ $(sw_vers -productVersion) == 10.11* ]] || [[ $(sw_vers -productVersion) == 10.12* ]] || [[ $(sw_vers -productVersion) == 10.13* ]]; then
sudo killall -HUP mDNSResponder
sudo discoveryutil udnsflushcaches
else
# macOS 10.14 (Mojave) 及更新版本
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
fi
echo "DNS 缓存清理完成。"
注意:脚本中使用了
sudo,运行时会要求输入管理员密码,建议使用sudo执行该脚本。
Linux 系统(基于 systemd-resolved)
大多数现代 Linux 发行版(如 Ubuntu 18.04+、Fedora、Arch Linux)使用 systemd-resolved 管理 DNS 缓存。
使用 systemd-resolved
#!/bin/bash echo "正在清理 Linux DNS 缓存..." sudo resolvectl flush-caches echo "DNS 缓存清理完成。"
resolvectl 不可用,可尝试:
sudo systemd-resolve --flush-caches
重启 NetworkManager(如果使用 NetworkManager 管理 DNS)
#!/bin/bash echo "正在重启 NetworkManager 以清理 DNS..." sudo systemctl restart NetworkManager echo "DNS 缓存已清理。"
针对其他 DNS 缓存服务
- dnsmasq:
sudo systemctl restart dnsmasq - nscd:
sudo systemctl restart nscd或sudo nscd -i hosts - Unbound:
sudo unbound-control flush_zone或sudo systemctl restart unbound
高级:跨平台自动检测脚本
如果你需要在一个脚本中自动判断当前系统,可以使用以下 Python 脚本(兼容性较好):
import platform
import subprocess
import sys
def flush_dns():
system = platform.system()
print(f"检测到操作系统: {system}")
if system == "Windows":
subprocess.run(["ipconfig", "/flushdns"], check=True)
elif system == "Darwin": # macOS
subprocess.run(["sudo", "dscacheutil", "-flushcache"], check=True)
subprocess.run(["sudo", "killall", "-HUP", "mDNSResponder"], check=True)
elif system == "Linux":
try:
subprocess.run(["sudo", "resolvectl", "flush-caches"], check=True)
except FileNotFoundError:
try:
subprocess.run(["sudo", "systemd-resolve", "--flush-caches"], check=True)
except FileNotFoundError:
print("未找到 systemd-resolved 命令,尝试重启 NetworkManager...")
subprocess.run(["sudo", "systemctl", "restart", "NetworkManager"], check=True)
else:
print(f"不支持的操作系统: {system}")
sys.exit(1)
print("DNS 缓存清理成功。")
if __name__ == "__main__":
flush_dns()
使用前确保已安装 Python 3,并根据需要配置
sudo免密码(例如在sudoers文件中添加相应规则)。
自动化脚本的注意事项
- 权限要求:Windows 需要管理员权限,macOS 和 Linux 需要 sudo 权限,建议在脚本中加入权限检查或使用
sudo。 - 系统兼容性:macOS 不同版本命令有差异,Linux 不同发行版及 DNS 管理器不同,建议在目标系统上测试。
- 安全性:不要随意以管理员权限运行来源不明的脚本,防止恶意操作。
- 定时自动清理:如果希望定期自动清理,可以结合系统任务计划器(Windows 任务计划程序、Linux cron、macOS launchd)来运行这些脚本。
如果你有具体的操作系统或使用场景,可以提供更多细节,我可以帮你调整脚本。