#!/bin/bash domain="$1" port="${2:-443}" # Utilise 443 par défaut si le 3ème paramètre (port) n'est pas fourni # Fonction pour effectuer le test SSL/TLS et obtenir la différence en jours jusqu'à l'expiration get_days_until_expiration() { local domain="$1" local port="$2" # Tester la date d'expiration du domaine sur le port spécifié expiration_date=$(echo | openssl s_client -connect "$domain":"$port" -servername "$domain" 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f2) # Convertir la date d'expiration en timestamp expiration_timestamp=$(date -d "$expiration_date" +%s) # Calculer le nombre de jours restants jusqu'à l'expiration today_timestamp=$(date +%s) local diff=$(( (expiration_timestamp - today_timestamp) / 86400 )) echo $diff } check_date() { local domain="$1" local port="$2" echo "Tester la date d'expiration du domaine $domain sur le port $port" # Obtenir la différence en jours jusqu'à l'expiration days_until_expiration=$(get_days_until_expiration "$domain" "$port") echo $days_until_expiration # Vérifier si $days_until_expiration est supérieur à 126 if [ "$days_until_expiration" -gt 126 ]; then exit 127 else exit $days_until_expiration fi } # Fonction pour tester si un MX existe et le tester check_domain_mx() { local domain="$1" local port="$2" # Vérifier si le domaine commence par "www" ou s'il n'a pas de sous-domaine (domain.tld) if [[ "$domain" == *.* && ! "$domain" == *.*.* ]]; then echo -e "Tester l'existence du champ MX pour le domaine $domain" # Récupérer toutes les réponses MX pour le domaine mx_domains=$(dig +short MX "$domain" | awk '{sub(/\.$/, "", $2); print $2}') if [ -n "$mx_domains" ]; then # Tester chaque domaine MX trouvé sur le port 993 for mx_domain in $mx_domains; do # Vérifier que le port 993 est ouvert if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then check_date "$mx_domain" "993" "$email" else echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain." fi done for mx_domain in $mx_domains; do # Vérifier que le port 465 est ouvert et tester la connexion SSL if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then check_date "$mx_domain" "465" "$email" else echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain." fi done else if [ -n "$email" ]; then echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email" fi echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." fi else echo -e "Tester l'existence du champ MX pour le domaine ${domain#*.}" # Récupérer toutes les réponses MX pour le domaine mx_domains=$(dig +short MX "${domain#*.}" | awk '{sub(/\.$/, "", $2); print $2}') if [ -n "$mx_domains" ]; then # Tester chaque domaine MX trouvé sur le port 993 for mx_domain in $mx_domains; do # Vérifier que le port 993 est ouvert if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 993; then check_date "$mx_domain" "993" "$email" else echo -e " ⚠️ Le port 993 n'est pas ouvert sur le domaine MX $mx_domain." fi done for mx_domain in $mx_domains; do # Vérifier que le port 465 est ouvert et tester la connexion SSL if echo -e "QUIT" | timeout 2 nc -z -w2 "$mx_domain" 465; then check_date "$mx_domain" "465" "$email" else echo -e " ⚠️ Le port 465 (SMTPS) n'est pas ouvert sur le domaine MX $mx_domain." fi done else if [ -n "$email" ]; then echo " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." | mail -s " ⚠️ [ALERTE] MX absent pour $domain:$port" "$email" fi echo -e " ⚠️ Le domaine $domain n'a pas d'enregistrement MX valide." fi fi } # Vérifier si le nom de domaine est accessible en utilisant "curl" if curl --output /dev/null --silent --head --fail "$domain"; then # Appel initial pour le domaine spécifié check_date "$domain" "$port" # Vérifier le domaine MX s'il existe #check_domain_mx "$domain" "$port" else echo " ⚠️ Le domaine $domain n'est pas accessible." exit -1 fi