mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-01-29 00:35:38 +08:00
58
scripts/set_dns.sh
Normal file
58
scripts/set_dns.sh
Normal file
@@ -0,0 +1,58 @@
|
||||
#!/bin/bash
|
||||
|
||||
function is_valid_ip() {
|
||||
local ip=$1
|
||||
local IFS='.'
|
||||
local -a octets
|
||||
|
||||
if [[ ! $ip =~ ^([0-9]+\.){3}[0-9]+$ ]]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
read -r -a octets <<<"$ip"
|
||||
|
||||
if [ "${#octets[@]}" -ne 4 ]; then
|
||||
return 1
|
||||
fi
|
||||
|
||||
for octet in "${octets[@]}"; do
|
||||
if ! [[ "$octet" =~ ^[0-9]+$ ]] || ((octet < 0 || octet > 255)); then
|
||||
return 1
|
||||
fi
|
||||
done
|
||||
|
||||
return 0
|
||||
}
|
||||
|
||||
if [ $# -lt 1 ]; then
|
||||
echo "Usage: $0 <hardware_port>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! is_valid_ip "$1"; then
|
||||
echo "$1 is not a valid IP address."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
nic=$(route -n get default | grep "interface" | awk '{print $2}')
|
||||
hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" '
|
||||
/Hardware Port:/{
|
||||
port=$0; gsub("Hardware Port: ", "", port)
|
||||
}
|
||||
/Device: /{
|
||||
if ($2 == dev) {
|
||||
print port;
|
||||
exit
|
||||
}
|
||||
}
|
||||
')
|
||||
|
||||
original_dns=$(networksetup -getdnsservers "$hardware_port")
|
||||
|
||||
if [ ${#original_dns} -gt 15 ]; then
|
||||
echo "Empty" >original_dns.txt
|
||||
else
|
||||
echo $original_dns >original_dns.txt
|
||||
fi
|
||||
|
||||
networksetup -setdnsservers "$hardware_port" "$1"
|
||||
Reference in New Issue
Block a user