#!/bin/bash # ========================================== # Script: dns_check.sh # Descripción: Consulta de registros DNS básica y completa # Uso: ./dns_check.sh [full] # ========================================== # Validar argumento de entrada if [ -z "$1" ]; then echo -e "\e[0;31mError: Debes proporcionar un dominio.\e[0m" echo "Uso: $0 [full]" exit 1 fi DOMAIN=$1 MODE=${2:-basic} # Por defecto es "basic" si no se envía el segundo argumento # Códigos de color CYAN='\e[0;36m' VERDE='\e[0;32m' AMARILLO='\e[1;33m' BLANCO_BOLD='\e[1;37m' NC='\e[0m' # Sin color # Servidores DNS (Fuentes de verdad) DNS_GOOGLE="8.8.8.8" DNS_EMPRESA="dns1.servidoraweb.net" # ========================================== # Función: Consulta Básica # ========================================== consultar_basico() { local server=$1 local nombre_server=$2 echo -e "${CYAN}====================================================${NC}" echo -e "${VERDE} 📡 Fuente de Verdad: ${nombre_server} (@${server})${NC}" echo -e "${CYAN}====================================================${NC}" # NS (DNS) echo -e "${AMARILLO}Registros DNS (NS):${NC}" dig @$server +short NS $DOMAIN | sed 's/^/ /' | grep . || echo " (Sin respuesta)" # MX echo -e "${AMARILLO}Registros MX:${NC}" dig @$server +short MX $DOMAIN | sed 's/^/ /' | grep . || echo " (Sin respuesta)" # Registro A (Principal) echo -e "${AMARILLO}Registro A (Dominio principal):${NC}" dig @$server +short A $DOMAIN | sed 's/^/ /' | grep . || echo " (Sin respuesta)" # Registro www echo -e "${AMARILLO}Registro A (www):${NC}" dig @$server +short A www.$DOMAIN | sed 's/^/ /' | grep . || echo " (Sin respuesta)" echo "" } # ========================================== # Función: Consulta Full (Avanzada) # ========================================== consultar_full() { local server=$1 local nombre_server=$2 echo -e "${CYAN}====================================================${NC}" echo -e "${VERDE} 🔍 Análisis Completo (FULL) desde: ${nombre_server} (@${server})${NC}" echo -e "${CYAN}====================================================${NC}" # Matriz de registros estándar registros=("A" "AAAA" "NS" "MX" "TXT" "SOA" "CAA") for reg in "${registros[@]}"; do salida=$(dig @$server +short $reg $DOMAIN) if [ -n "$salida" ]; then echo -e "${AMARILLO}Registros ${reg}:${NC}" # Nota: El registro TXT contiene automáticamente el SPF echo "$salida" | sed 's/^/ /' fi done # DMARC (Requiere consultar el prefijo _dmarc) dmarc=$(dig @$server +short TXT _dmarc.$DOMAIN) if [ -n "$dmarc" ]; then echo -e "${AMARILLO}Registro DMARC:${NC}" echo "$dmarc" | sed 's/^/ /' fi # DKIM (Búsqueda predictiva del selector por defecto de cPanel) dkim=$(dig @$server +short TXT default._domainkey.$DOMAIN) if [ -n "$dkim" ]; then echo -e "${AMARILLO}Registro DKIM (Selector 'default'):${NC}" echo "$dkim" | sed 's/^/ /' fi # SRV Comunes (Ej. Autodiscover para correos) srv_auto=$(dig @$server +short SRV _autodiscover._tcp.$DOMAIN) if [ -n "$srv_auto" ]; then echo -e "${AMARILLO}Registro SRV (Autodiscover):${NC}" echo "$srv_auto" | sed 's/^/ /' fi echo "" } # ========================================== # Ejecución Principal # ========================================== echo "" echo -e "Iniciando diagnóstico DNS para: ${BLANCO_BOLD}${DOMAIN}${NC}" echo "" # Convertir el argumento de modo a minúsculas por si el usuario escribe "FULL" MODE=$(echo "$MODE" | tr '[:upper:]' '[:lower:]') if [ "$MODE" == "full" ]; then consultar_full $DNS_GOOGLE "Google DNS" consultar_full $DNS_EMPRESA "DNS ServidoraWeb" else consultar_basico $DNS_GOOGLE "Google DNS" consultar_basico $DNS_EMPRESA "DNS ServidoraWeb" fi echo -e "${VERDE}✓ Consulta finalizada.${NC}" echo ""