mirror of
https://github.com/clash-verge-rev/clash-verge-rev
synced 2025-05-05 02:53:43 +08:00
feat: improve set dns logic
This commit is contained in:
parent
5d37015f4d
commit
ee9d12d933
@ -2,6 +2,7 @@
|
|||||||
|
|
||||||
### Notice
|
### Notice
|
||||||
|
|
||||||
|
- 历时3个月的紧密开发与严格测试稳定版2.0.0终于发布了:巨量改进与性能、稳定性提升,目前Clash Verge Rev已经有了比肩cfw的健壮性;而且更强大易用!
|
||||||
- 由于更改了服务安装逻辑,Mac/Linux 首次安装需要输入 2 遍系统密码卸载和安装服务,以后可以丝滑使用 tun(虚拟网卡)模式
|
- 由于更改了服务安装逻辑,Mac/Linux 首次安装需要输入 2 遍系统密码卸载和安装服务,以后可以丝滑使用 tun(虚拟网卡)模式
|
||||||
- 因 Tauri 2.0 底层 bug,关闭窗口暂时修改为最小化功能
|
- 因 Tauri 2.0 底层 bug,关闭窗口暂时修改为最小化功能
|
||||||
|
|
||||||
@ -29,6 +30,8 @@
|
|||||||
- 添加统一延迟的设置开关
|
- 添加统一延迟的设置开关
|
||||||
- 添加 Windows 下自动检测并下载 vc runtime 的功能
|
- 添加 Windows 下自动检测并下载 vc runtime 的功能
|
||||||
- 支持显示 mux 和 mptcp 的节点标识
|
- 支持显示 mux 和 mptcp 的节点标识
|
||||||
|
- 延迟测试连接更换 https 的 cp.cloudflare.com/generate_204 以防止机场劫持(关闭统一延迟的情况下延迟测试结果会有所增加)。
|
||||||
|
- 重构日志记录逻辑,可以收集和筛选所有日志类型了(之前无法记录debug的日志类型)
|
||||||
|
|
||||||
### Performance
|
### Performance
|
||||||
|
|
||||||
@ -39,6 +42,7 @@
|
|||||||
- 移除无用的 PID 创建逻辑
|
- 移除无用的 PID 创建逻辑
|
||||||
- 优化系统 DNS 设置逻辑
|
- 优化系统 DNS 设置逻辑
|
||||||
- 后端实现窗口控制
|
- 后端实现窗口控制
|
||||||
|
- 重构 MacOS 下的 DNS 设置逻辑
|
||||||
|
|
||||||
### Bugs Fixes
|
### Bugs Fixes
|
||||||
|
|
||||||
|
@ -1,57 +1,66 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
function is_valid_ip() {
|
# 验证IPv4地址格式
|
||||||
|
function is_valid_ipv4() {
|
||||||
local ip=$1
|
local ip=$1
|
||||||
local IFS='.'
|
local IFS='.'
|
||||||
local -a octets
|
local -a octets
|
||||||
|
|
||||||
if [[ ! $ip =~ ^([0-9]+\.){3}[0-9]+$ ]]; then
|
[[ ! $ip =~ ^([0-9]+\.){3}[0-9]+$ ]] && return 1
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
read -r -a octets <<<"$ip"
|
read -r -a octets <<<"$ip"
|
||||||
|
[ "${#octets[@]}" -ne 4 ] && return 1
|
||||||
if [ "${#octets[@]}" -ne 4 ]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
for octet in "${octets[@]}"; do
|
for octet in "${octets[@]}"; do
|
||||||
if ! [[ "$octet" =~ ^[0-9]+$ ]] || ((octet < 0 || octet > 255)); then
|
if ! [[ "$octet" =~ ^[0-9]+$ ]] || ((octet < 0 || octet > 255)); then
|
||||||
return 1
|
return 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
return 0
|
return 0
|
||||||
}
|
}
|
||||||
|
|
||||||
if [ $# -lt 1 ]; then
|
# 验证IPv6地址格式
|
||||||
echo "Usage: $0 <hardware_port>"
|
function is_valid_ipv6() {
|
||||||
exit 1
|
local ip=$1
|
||||||
fi
|
if [[ ! $ip =~ ^([0-9a-fA-F]{0,4}:){1,7}[0-9a-fA-F]{0,4}$ ]] && \
|
||||||
|
[[ ! $ip =~ ^(([0-9a-fA-F]{0,4}:){0,7}:|(:[0-9a-fA-F]{0,4}:){0,6}:[0-9a-fA-F]{0,4})$ ]]; then
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
if ! is_valid_ip "$1"; then
|
# 验证IP地址是否为有效的IPv4或IPv6
|
||||||
echo "$1 is not a valid IP address."
|
function is_valid_ip() {
|
||||||
exit 1
|
is_valid_ipv4 "$1" || is_valid_ipv6 "$1"
|
||||||
fi
|
}
|
||||||
|
|
||||||
|
# 检查参数
|
||||||
|
[ $# -lt 1 ] && echo "Usage: $0 <IP address>" && exit 1
|
||||||
|
! is_valid_ip "$1" && echo "$1 is not a valid IP address." && exit 1
|
||||||
|
|
||||||
|
# 获取网络接口和硬件端口
|
||||||
nic=$(route -n get default | grep "interface" | awk '{print $2}')
|
nic=$(route -n get default | grep "interface" | awk '{print $2}')
|
||||||
hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" '
|
hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" '
|
||||||
/Hardware Port:/{
|
/Hardware Port:/{port=$0; gsub("Hardware Port: ", "", port)}
|
||||||
port=$0; gsub("Hardware Port: ", "", port)
|
/Device: /{if ($2 == dev) {print port; exit}}
|
||||||
}
|
|
||||||
/Device: /{
|
|
||||||
if ($2 == dev) {
|
|
||||||
print port;
|
|
||||||
exit
|
|
||||||
}
|
|
||||||
}
|
|
||||||
')
|
')
|
||||||
|
|
||||||
|
# 获取当前DNS设置
|
||||||
original_dns=$(networksetup -getdnsservers "$hardware_port")
|
original_dns=$(networksetup -getdnsservers "$hardware_port")
|
||||||
|
|
||||||
if [ ${#original_dns} -le 15 ]; then
|
# 检查当前DNS设置是否有效
|
||||||
if [ -n "$original_dns" ]; then
|
is_valid_dns=false
|
||||||
echo $original_dns >original_dns.txt
|
for ip in $original_dns; do
|
||||||
networksetup -setdnsservers "$hardware_port" "$1"
|
ip=$(echo "$ip" | tr -d '[:space:]')
|
||||||
|
if [ -n "$ip" ] && (is_valid_ipv4 "$ip" || is_valid_ipv6 "$ip"); then
|
||||||
|
is_valid_dns=true
|
||||||
|
break
|
||||||
fi
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# 更新DNS设置
|
||||||
|
if [ "$is_valid_dns" = false ]; then
|
||||||
|
echo "empty" > original_dns.txt
|
||||||
|
else
|
||||||
|
echo "$original_dns" > original_dns.txt
|
||||||
fi
|
fi
|
||||||
|
networksetup -setdnsservers "$hardware_port" "$1"
|
Loading…
x
Reference in New Issue
Block a user