mirror of
				https://github.com/bolucat/Archive.git
				synced 2025-10-31 20:03:10 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			Bash
		
	
	
	
	
	
| #!/bin/bash
 | |
| 
 | |
| # 验证IPv4地址格式
 | |
| function is_valid_ipv4() {
 | |
|     local ip=$1
 | |
|     local IFS='.'
 | |
|     local -a octets
 | |
| 
 | |
|     [[ ! $ip =~ ^([0-9]+\.){3}[0-9]+$ ]] && return 1
 | |
|     read -r -a octets <<<"$ip"
 | |
|     [ "${#octets[@]}" -ne 4 ] && return 1
 | |
| 
 | |
|     for octet in "${octets[@]}"; do
 | |
|         if ! [[ "$octet" =~ ^[0-9]+$ ]] || ((octet < 0 || octet > 255)); then
 | |
|             return 1
 | |
|         fi
 | |
|     done
 | |
|     return 0
 | |
| }
 | |
| 
 | |
| # 验证IPv6地址格式
 | |
| function is_valid_ipv6() {
 | |
|     local ip=$1
 | |
|     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
 | |
| }
 | |
| 
 | |
| # 验证IP地址是否为有效的IPv4或IPv6
 | |
| function is_valid_ip() {
 | |
|     is_valid_ipv4 "$1" || is_valid_ipv6 "$1"
 | |
| }
 | |
| 
 | |
| # 检查参数
 | |
| [ $# -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}')
 | |
| hardware_port=$(networksetup -listallhardwareports | awk -v dev="$nic" '
 | |
|     /Hardware Port:/{port=$0; gsub("Hardware Port: ", "", port)} 
 | |
|     /Device: /{if ($2 == dev) {print port; exit}}
 | |
| ')
 | |
| 
 | |
| # 获取当前DNS设置
 | |
| original_dns=$(networksetup -getdnsservers "$hardware_port")
 | |
| 
 | |
| # 检查当前DNS设置是否有效
 | |
| is_valid_dns=false
 | |
| for ip in $original_dns; do
 | |
|     ip=$(echo "$ip" | tr -d '[:space:]')
 | |
|     if [ -n "$ip" ] && (is_valid_ipv4 "$ip" || is_valid_ipv6 "$ip"); then
 | |
|         is_valid_dns=true
 | |
|         break
 | |
|     fi
 | |
| done
 | |
| 
 | |
| # 更新DNS设置
 | |
| if [ "$is_valid_dns" = false ]; then
 | |
|     echo "empty" >.original_dns.txt
 | |
| else
 | |
|     echo "$original_dns" >.original_dns.txt
 | |
| fi
 | |
| networksetup -setdnsservers "$hardware_port" "$1"
 | 
![github-action[bot]](/assets/img/avatar_default.png)