ddns_update.sh
Está comentado!
This commit is contained in:
commit
dfa652bb0d
134
ddns_update_winco.sh
Normal file
134
ddns_update_winco.sh
Normal file
@ -0,0 +1,134 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Configurações
|
||||
# Lista de hostnames para atualizar (adicione quantos precisar)
|
||||
HOSTNAMES=(
|
||||
"subdominio1.ddns.com.br"
|
||||
"subdominio2.ddns.com.br"
|
||||
"subdominio3.ddns.com.br"
|
||||
# Adicione mais conforme necessário
|
||||
)
|
||||
DDNS_URL="http://members.ddns.com.br/nic/update"
|
||||
LOG_FILE="/tmp/ddns_update.log"
|
||||
IP_CACHE_FILE="/tmp/last_ip.txt"
|
||||
|
||||
# Função para log
|
||||
log_message() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
|
||||
}
|
||||
|
||||
# Função para obter IP público
|
||||
get_public_ip() {
|
||||
local ip=""
|
||||
|
||||
# Lista de serviços para verificar IP público (em ordem de preferência)
|
||||
local services=(
|
||||
"https://ifconfig.me/ip"
|
||||
"https://api.ipify.org"
|
||||
"https://ipecho.net/plain"
|
||||
"https://icanhazip.com"
|
||||
"https://ident.me"
|
||||
)
|
||||
|
||||
for service in "${services[@]}"; do
|
||||
ip=$(curl -s --connect-timeout 10 --max-time 15 "$service" | tr -d '\n\r ')
|
||||
|
||||
# Verifica se o IP é válido (formato IPv4)
|
||||
if [[ $ip =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
||||
echo "$ip"
|
||||
return 0
|
||||
fi
|
||||
done
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Função para atualizar DDNS
|
||||
update_ddns() {
|
||||
local current_ip="$1"
|
||||
local hostname="$2"
|
||||
local update_url="${DDNS_URL}?hostname=${hostname}&myip=${current_ip}"
|
||||
|
||||
log_message "Atualizando DDNS para $hostname com IP: $current_ip"
|
||||
|
||||
# Faz a requisição de atualização
|
||||
local response=$(curl -s --connect-timeout 15 --max-time 30 "$update_url")
|
||||
local curl_exit_code=$?
|
||||
|
||||
if [ $curl_exit_code -eq 0 ]; then
|
||||
log_message "✓ $hostname atualizado com sucesso. Resposta: $response"
|
||||
return 0
|
||||
else
|
||||
log_message "✗ Erro ao atualizar $hostname (curl exit code: $curl_exit_code)"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# Função principal
|
||||
main() {
|
||||
log_message "=== Iniciando verificação de IP público ==="
|
||||
|
||||
# Verifica se há hostnames configurados
|
||||
if [ ${#HOSTNAMES[@]} -eq 0 ]; then
|
||||
log_message "ERRO: Nenhum hostname configurado na lista HOSTNAMES"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_message "Hostnames configurados: ${HOSTNAMES[*]}"
|
||||
|
||||
# Obtém o IP público atual
|
||||
current_ip=$(get_public_ip)
|
||||
|
||||
if [ -z "$current_ip" ]; then
|
||||
log_message "ERRO: Não foi possível obter o IP público"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_message "IP público detectado: $current_ip"
|
||||
|
||||
# Verifica se existe cache do último IP
|
||||
if [ -f "$IP_CACHE_FILE" ]; then
|
||||
last_ip=$(cat "$IP_CACHE_FILE" 2>/dev/null)
|
||||
|
||||
if [ "$current_ip" = "$last_ip" ]; then
|
||||
log_message "IP não mudou ($current_ip), não é necessário atualizar"
|
||||
exit 0
|
||||
else
|
||||
log_message "IP mudou de $last_ip para $current_ip"
|
||||
fi
|
||||
else
|
||||
log_message "Primeira execução ou cache não encontrado"
|
||||
fi
|
||||
|
||||
# Contador de sucessos/falhas
|
||||
local success_count=0
|
||||
local fail_count=0
|
||||
|
||||
# Atualiza cada hostname
|
||||
log_message "--- Iniciando atualizações ---"
|
||||
for hostname in "${HOSTNAMES[@]}"; do
|
||||
if update_ddns "$current_ip" "$hostname"; then
|
||||
((success_count++))
|
||||
else
|
||||
((fail_count++))
|
||||
fi
|
||||
|
||||
# Pequena pausa entre as requisições para não sobrecarregar o servidor
|
||||
sleep 2
|
||||
done
|
||||
|
||||
# Salva o IP no cache apenas se pelo menos uma atualização foi bem-sucedida
|
||||
if [ $success_count -gt 0 ]; then
|
||||
echo "$current_ip" > "$IP_CACHE_FILE"
|
||||
log_message "=== Resumo: $success_count sucessos, $fail_count falhas ==="
|
||||
log_message "IP $current_ip salvo no cache"
|
||||
else
|
||||
log_message "=== ERRO: Todas as atualizações falharam! ==="
|
||||
exit 1
|
||||
fi
|
||||
|
||||
log_message "=== Processo concluído ==="
|
||||
}
|
||||
|
||||
# Executa o script principal
|
||||
main "$@"
|
Loading…
Reference in New Issue
Block a user