Atualizar ddns_update_winco.sh

This commit is contained in:
walter 2025-06-06 14:28:34 +00:00
parent 7458455226
commit 15825fb0d0

View File

@ -1,16 +1,14 @@
#!/bin/bash #!/bin/bash
# Configurações # Configurações
# Credenciais do DDNS (substitua pelos seus dados) # Array associativo com hostname e suas credenciais
DDNS_USERNAME="seu_usuario" # Formato: "hostname:usuario:senha"
DDNS_PASSWORD="sua_senha" DDNS_CONFIGS=(
"subdominio1.ddns.com.br:usuario1:senha1"
# Lista de hostnames para atualizar (adicione quantos precisar) "subdominio2.ddns.com.br:usuario2:senha2"
HOSTNAMES=( "subdominio3.ddns.com.br:usuario3:senha3"
"subdominio1.ddns.com.br"
"subdominio2.ddns.com.br"
"subdominio3.ddns.com.br"
# Adicione mais conforme necessário # Adicione mais conforme necessário
# "meudominio.ddns.com.br:meuusuario:minhasenha"
) )
DDNS_URL="http://members.ddns.com.br/nic/update" DDNS_URL="http://members.ddns.com.br/nic/update"
LOG_FILE="/tmp/ddns_update.log" LOG_FILE="/tmp/ddns_update.log"
@ -47,17 +45,39 @@ get_public_ip() {
return 1 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 # Função para atualizar DDNS
update_ddns() { update_ddns() {
local current_ip="$1" 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}" 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 # Faz a requisição de atualização com autenticação HTTP Basic
local response=$(curl -s --connect-timeout 15 --max-time 30 \ local response=$(curl -s --connect-timeout 15 --max-time 30 \
--user "${DDNS_USERNAME}:${DDNS_PASSWORD}" \ --user "${username}:${password}" \
"$update_url") "$update_url")
local curl_exit_code=$? local curl_exit_code=$?
@ -74,19 +94,32 @@ update_ddns() {
main() { main() {
log_message "=== Iniciando verificação de IP público ===" log_message "=== Iniciando verificação de IP público ==="
# Verifica se as credenciais estão configuradas # Verifica se há configurações
if [ "$DDNS_USERNAME" = "seu_usuario" ] || [ "$DDNS_PASSWORD" = "sua_senha" ]; then if [ ${#DDNS_CONFIGS[@]} -eq 0 ]; then
log_message "ERRO: Credenciais não configuradas! Edite DDNS_USERNAME e DDNS_PASSWORD" log_message "ERRO: Nenhuma configuração definida no array DDNS_CONFIGS"
exit 1 exit 1
fi fi
# Verifica se há hostnames configurados # Valida se as configurações não são os exemplos padrão
if [ ${#HOSTNAMES[@]} -eq 0 ]; then local has_default=false
log_message "ERRO: Nenhum hostname configurado na lista HOSTNAMES" 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 exit 1
fi 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 # Obtém o IP público atual
current_ip=$(get_public_ip) current_ip=$(get_public_ip)
@ -116,10 +149,10 @@ main() {
local success_count=0 local success_count=0
local fail_count=0 local fail_count=0
# Atualiza cada hostname # Atualiza cada domínio com suas credenciais
log_message "--- Iniciando atualizações ---" log_message "--- Iniciando atualizações ---"
for hostname in "${HOSTNAMES[@]}"; do for config in "${DDNS_CONFIGS[@]}"; do
if update_ddns "$current_ip" "$hostname"; then if update_ddns "$current_ip" "$config"; then
((success_count++)) ((success_count++))
else else
((fail_count++)) ((fail_count++))