ajout d'un script pour trouver la première adresse IP disponible
This commit is contained in:
37
scripts/server-dhcp/get_first_free_ip.sh
Normal file
37
scripts/server-dhcp/get_first_free_ip.sh
Normal file
@@ -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
|
||||
Reference in New Issue
Block a user