From 506dfb10861f6d0642cda1b98d8be3a9ae9fd795 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= <cedric@abonnel.fr> Date: Thu, 20 Mar 2025 07:27:41 +0100 Subject: [PATCH] choix de l'interface et de l'interface IP --- scripts/server-dhcp/setup_dhcp.sh | 57 ++++++++++++++++++------------- 1 file changed, 33 insertions(+), 24 deletions(-) diff --git a/scripts/server-dhcp/setup_dhcp.sh b/scripts/server-dhcp/setup_dhcp.sh index 3265075..0f606f2 100644 --- a/scripts/server-dhcp/setup_dhcp.sh +++ b/scripts/server-dhcp/setup_dhcp.sh @@ -18,42 +18,51 @@ else echo "dnsmasq est déjà installé." fi +# Récupérer toutes les interfaces réseau sauf loopback +mapfile -t NOMS < <(ip -o link show | awk -F': ' '{print $2}' | grep -v lo) -# Récupérer toutes les interfaces avec leurs IP v4, sauf loopback -mapfile -t IPS < <(ip -4 -o addr show | awk '!/ lo / {print $2" "$4}') - -if [[ ${#IPS[@]} -eq 0 ]]; then - echo "Aucune interface réseau avec une adresse IPv4 trouvée." +if [[ ${#NOMS[@]} -eq 0 ]]; then + echo "Aucune interface réseau trouvée." exit 1 fi -echo "Sélectionnez l'interface et l'IP à utiliser :" -select CHOIX in "${IPS[@]}"; do - if [[ -n "$CHOIX" ]]; then - INTERFACE=$(echo "$CHOIX" | awk '{print $1}') - IP_SERVEUR=$(echo "$CHOIX" | awk '{print $2}' | cut -d'/' -f1) - break +# Construire les options avec IP si existante +OPTIONS=() +for IFACE in "${NOMS[@]}"; do + # Nettoyer l'interface de @ifX + IFACE_CLEAN=$(echo "$IFACE" | cut -d'@' -f1) + IP=$(ip -4 -o addr show "$IFACE_CLEAN" 2>/dev/null | awk '{print $4}' | cut -d'/' -f1) + if [[ -n "$IP" ]]; then + OPTIONS+=("$IFACE_CLEAN ($IP)") else - echo "Choix invalide." + OPTIONS+=("$IFACE_CLEAN (Pas d'IP)") fi done -echo "Interface sélectionnée : $INTERFACE" -echo "Adresse IP sélectionnée : $IP_SERVEUR" - -# Demander si l'utilisateur veut utiliser une autre IP -read -rp "Voulez-vous utiliser une autre adresse IP que $IP_SERVEUR ? (o/N) : " REPONSE - -if [[ "$REPONSE" =~ ^[oO]$ ]]; then - read -rp "Saisissez l'adresse IP souhaitée : " IP_MANUELLE - if [[ "$IP_MANUELLE" =~ ^([0-9]{1,3}\.){3}[0-9]{1,3}$ ]]; then - IP_SERVEUR="$IP_MANUELLE" - echo "✅ Nouvelle adresse IP sélectionnée : $IP_SERVEUR" +echo "Sélectionnez l'interface réseau à utiliser (IP affichée si existante) :" +PS3="Votre choix : " +select CHOIX in "${OPTIONS[@]}"; do + if [[ -n "$CHOIX" ]]; then + INTERFACE=$(echo "$CHOIX" | awk '{print $1}') + break else - echo "❌ Adresse IP invalide. On garde l'IP sélectionnée : $IP_SERVEUR" + echo "Choix invalide. Veuillez réessayer." fi +done + +# Maintenant que l'interface est choisie, récupérer l'IP +IP_EXISTANTE=$(ip -4 -o addr show "$INTERFACE" 2>/dev/null | awk '{print $4}' | cut -d'/' -f1) + +if [[ -n "$IP_EXISTANTE" ]]; then + IP_SERVEUR="$IP_EXISTANTE" +else + read -rp "Aucune IP détectée sur $INTERFACE. Veuillez entrer une IP à utiliser : " IP_SAISIE + IP_SERVEUR="$IP_SAISIE" fi +echo "✅ Interface sélectionnée : $INTERFACE" +echo "✅ Adresse IP sélectionnée : $IP_SERVEUR" + # Vérifier si l'IP est privée ou publique if [[ "$IP_SERVEUR" =~ ^10\. ]] || [[ "$IP_SERVEUR" =~ ^192\.168\. ]] || [[ "$IP_SERVEUR" =~ ^172\.(1[6-9]|2[0-9]|3[0-1])\. ]]; then echo "✅ Adresse IP privée détectée : $IP_SERVEUR"