From 569ec5457e5e9fad1a7f4d08599a3c939501255e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?C=C3=A9drix?= Date: Tue, 11 Mar 2025 13:53:20 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20d'un=20script=20pour=20trouver=20la=20p?= =?UTF-8?q?remi=C3=A8re=20adresse=20IP=20disponible?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- scripts/server-dhcp/get_first_free_ip.sh | 37 ++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 scripts/server-dhcp/get_first_free_ip.sh diff --git a/scripts/server-dhcp/get_first_free_ip.sh b/scripts/server-dhcp/get_first_free_ip.sh new file mode 100644 index 0000000..0dd9608 --- /dev/null +++ b/scripts/server-dhcp/get_first_free_ip.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Déterminer l'interface réseau active +INTERFACE=$(ip route | grep default | awk '{print $5}') +if [[ -z "$INTERFACE" ]]; then + echo "Erreur : Impossible de détecter une interface réseau active." + exit 1 +fi + +# Obtenir l'adresse IP et le masque de sous-réseau +IP_ADDR=$(ip -4 addr show "$INTERFACE" | grep -oP '(?<=inet\s)\d+(\.\d+){3}') +SUBNET_MASK=$(ip -4 addr show "$INTERFACE" | grep -oP '(?<=inet\s)\d+(\.\d+){3}/\d+' | cut -d'/' -f2) + +# Vérifier que l'adresse et le masque sont valides +if [[ -z "$IP_ADDR" || -z "$SUBNET_MASK" ]]; then + echo "Erreur : Impossible de récupérer l'adresse IP et le masque de sous-réseau." + exit 1 +fi + +# Calculer l'adresse réseau +IFS='.' read -r i1 i2 i3 i4 <<< "$(echo "$IP_ADDR" | cut -d'/' -f1)" +NET_PREFIX=$(sipcalc "$IP_ADDR/$SUBNET_MASK" | grep 'Network address' | awk '{print $3}') + +# Scanner le réseau et trouver la première adresse libre +echo "🔍 Scan du réseau $NET_PREFIX/$SUBNET_MASK en cours..." +for ((i=2; i<255; i++)); do + TEST_IP="$i1.$i2.$i3.$i" + + # Vérifier si l'IP répond au ping + if ! ping -c 1 -W 1 "$TEST_IP" &>/dev/null; then + echo "✅ Première IP disponible : $TEST_IP" + exit 0 + fi +done + +echo "❌ Aucune IP libre trouvée dans le sous-réseau." +exit 1