choix de l'interface et de l'interface IP

This commit is contained in:
Cédric Abonnel 2025-03-20 07:27:41 +01:00
parent f22cf0bff7
commit 506dfb1086
1 changed files with 33 additions and 24 deletions
scripts/server-dhcp

View File

@ -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"