diff --git a/ddns_update_winco.sh b/ddns_update_winco.sh index 7b2a2f1..7320b7f 100644 --- a/ddns_update_winco.sh +++ b/ddns_update_winco.sh @@ -1,16 +1,14 @@ #!/bin/bash # Configurações -# Credenciais do DDNS (substitua pelos seus dados) -DDNS_USERNAME="seu_usuario" -DDNS_PASSWORD="sua_senha" - -# Lista de hostnames para atualizar (adicione quantos precisar) -HOSTNAMES=( - "subdominio1.ddns.com.br" - "subdominio2.ddns.com.br" - "subdominio3.ddns.com.br" +# Array associativo com hostname e suas credenciais +# Formato: "hostname:usuario:senha" +DDNS_CONFIGS=( + "subdominio1.ddns.com.br:usuario1:senha1" + "subdominio2.ddns.com.br:usuario2:senha2" + "subdominio3.ddns.com.br:usuario3:senha3" # Adicione mais conforme necessário + # "meudominio.ddns.com.br:meuusuario:minhasenha" ) DDNS_URL="http://members.ddns.com.br/nic/update" LOG_FILE="/tmp/ddns_update.log" @@ -47,17 +45,39 @@ get_public_ip() { return 1 } +# Função para extrair dados da configuração +parse_config() { + local config="$1" + local field="$2" + + # Separa hostname:usuario:senha + local hostname=$(echo "$config" | cut -d':' -f1) + local username=$(echo "$config" | cut -d':' -f2) + local password=$(echo "$config" | cut -d':' -f3-) + + case "$field" in + "hostname") echo "$hostname" ;; + "username") echo "$username" ;; + "password") echo "$password" ;; + esac +} + # Função para atualizar DDNS update_ddns() { local current_ip="$1" - local hostname="$2" + local config="$2" + + local hostname=$(parse_config "$config" "hostname") + local username=$(parse_config "$config" "username") + local password=$(parse_config "$config" "password") + local update_url="${DDNS_URL}?hostname=${hostname}&myip=${current_ip}" - log_message "Atualizando DDNS para $hostname com IP: $current_ip" + log_message "Atualizando DDNS para $hostname com IP: $current_ip (usuário: $username)" # Faz a requisição de atualização com autenticação HTTP Basic local response=$(curl -s --connect-timeout 15 --max-time 30 \ - --user "${DDNS_USERNAME}:${DDNS_PASSWORD}" \ + --user "${username}:${password}" \ "$update_url") local curl_exit_code=$? @@ -74,19 +94,32 @@ update_ddns() { main() { log_message "=== Iniciando verificação de IP público ===" - # Verifica se as credenciais estão configuradas - if [ "$DDNS_USERNAME" = "seu_usuario" ] || [ "$DDNS_PASSWORD" = "sua_senha" ]; then - log_message "ERRO: Credenciais não configuradas! Edite DDNS_USERNAME e DDNS_PASSWORD" + # Verifica se há configurações + if [ ${#DDNS_CONFIGS[@]} -eq 0 ]; then + log_message "ERRO: Nenhuma configuração definida no array DDNS_CONFIGS" exit 1 fi - # Verifica se há hostnames configurados - if [ ${#HOSTNAMES[@]} -eq 0 ]; then - log_message "ERRO: Nenhum hostname configurado na lista HOSTNAMES" + # Valida se as configurações não são os exemplos padrão + local has_default=false + for config in "${DDNS_CONFIGS[@]}"; do + if [[ "$config" =~ ^subdominio[123]\.ddns\.com\.br:usuario[123]:senha[123]$ ]]; then + has_default=true + break + fi + done + + if [ "$has_default" = true ]; then + log_message "ERRO: Configurações padrão detectadas! Configure seus domínios e credenciais reais" exit 1 fi - log_message "Hostnames configurados: ${HOSTNAMES[*]}" + # Lista os domínios configurados + local hostnames=() + for config in "${DDNS_CONFIGS[@]}"; do + hostnames+=($(parse_config "$config" "hostname")) + done + log_message "Domínios configurados: ${hostnames[*]}" # Obtém o IP público atual current_ip=$(get_public_ip) @@ -116,10 +149,10 @@ main() { local success_count=0 local fail_count=0 - # Atualiza cada hostname + # Atualiza cada domínio com suas credenciais log_message "--- Iniciando atualizações ---" - for hostname in "${HOSTNAMES[@]}"; do - if update_ddns "$current_ip" "$hostname"; then + for config in "${DDNS_CONFIGS[@]}"; do + if update_ddns "$current_ip" "$config"; then ((success_count++)) else ((fail_count++))