Compare commits
4 Commits
e3e779c870
...
fe7f57dbc7
Author | SHA1 | Date |
---|---|---|
|
fe7f57dbc7 | |
|
cb0897aa2f | |
|
2f59a957d7 | |
|
565a3e2216 |
scripts
|
@ -122,7 +122,6 @@ for TARGET_DIR in "${SELECTED_DIRS_ARRAY[@]}"; do
|
|||
else
|
||||
echo " ↳ Téléchargement de $FILE_NAME..."
|
||||
fi
|
||||
echo "$file"
|
||||
wget -q -O "$FILE_PATH" "$REPO_URL/$TARGET_DIR/$file"
|
||||
done < "$LIST_PATH"
|
||||
|
||||
|
|
|
@ -25,11 +25,36 @@ IP="$1"
|
|||
shift # Supprime le premier argument pour ne garder que les hostnames
|
||||
HOSTNAMES=("$@")
|
||||
|
||||
# Fonction pour obtenir le nom de domaine de la machine
|
||||
get_domain_name() {
|
||||
local domain=$(dnsdomainname)
|
||||
echo "$domain"
|
||||
}
|
||||
|
||||
# Fonction pour obtenir le FQDN d'un hostname
|
||||
get_fqdn() {
|
||||
local hostname="$1"
|
||||
local domain_name=$(get_domain_name)
|
||||
if [[ -n "$domain_name" ]]; then
|
||||
echo "$hostname.$domain_name"
|
||||
else
|
||||
echo "$hostname"
|
||||
fi
|
||||
}
|
||||
|
||||
# Fonction pour vérifier si un hostname est déjà enregistré
|
||||
is_hostname_registered() {
|
||||
local hostname="$1"
|
||||
grep -q "address=/$hostname/$IP" "$DNSMASQ_CONF"
|
||||
return $?
|
||||
}
|
||||
|
||||
# Variable pour suivre si un changement a été fait
|
||||
MODIFIED=0
|
||||
|
||||
# Vérifier si l'IP existe déjà dans le fichier
|
||||
EXISTING_HOSTNAMES=($(grep "address=.*/$IP" "$DNSMASQ_CONF" | sed -E "s/address=\/(.*)\/$IP/\1/"))
|
||||
EXISTING_HOSTNAMES=($(grep -E "address=/[^ ]+/$IP$" "$DNSMASQ_CONF" | sed -E "s/address=\/([^\/]+)\/$IP/\1/"))
|
||||
|
||||
|
||||
if [[ ${#EXISTING_HOSTNAMES[@]} -gt 0 ]]; then
|
||||
echo "L'adresse IP $IP existe déjà avec les noms suivants : ${EXISTING_HOSTNAMES[*]}"
|
||||
|
@ -39,12 +64,18 @@ fi
|
|||
|
||||
# Vérifier et ajouter chaque hostname
|
||||
for HOSTNAME in "${HOSTNAMES[@]}"; do
|
||||
if [[ ! " ${EXISTING_HOSTNAMES[*]} " =~ " ${HOSTNAME} " ]]; then
|
||||
echo "address=/$HOSTNAME/$IP" >> "$DNSMASQ_CONF"
|
||||
echo "Ajout de : $HOSTNAME -> $IP"
|
||||
MODIFIED=1
|
||||
FQDN=$(get_fqdn "$HOSTNAME")
|
||||
echo "Le FQDN détecté pour $HOSTNAME est : $FQDN"
|
||||
|
||||
if is_hostname_registered "$FQDN"; then
|
||||
echo "L'association $FQDN -> $IP existe déjà."
|
||||
else
|
||||
echo "L'association $HOSTNAME -> $IP existe déjà."
|
||||
read -p "Le FQDN $FQDN n'est pas dans la liste. Voulez-vous l'ajouter ? (o/n) " REPLY
|
||||
if [[ "$REPLY" =~ ^[Oo]$ ]]; then
|
||||
echo "address=/$FQDN/$IP" >> "$DNSMASQ_CONF"
|
||||
echo "Ajout de : $FQDN -> $IP"
|
||||
MODIFIED=1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
|
|
|
@ -1,13 +1,32 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Fichier contenant les réservations DHCP (modifier si nécessaire)
|
||||
# Déterminer l'interface réseau active (exclure loopback)
|
||||
INTERFACE=$(ip route | awk '/default/ {print $5; exit}')
|
||||
|
||||
# Vérifier si une interface est détectée
|
||||
if [[ -z "$INTERFACE" ]]; then
|
||||
echo "❌ Aucune interface réseau active détectée."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Déterminer l'adresse IP et le masque réseau de l'interface active
|
||||
IP_INFO=$(ip -4 addr show "$INTERFACE" | awk '/inet / {print $2}')
|
||||
NETWORK_IP=$(echo "$IP_INFO" | cut -d'/' -f1)
|
||||
NETMASK_CIDR=$(echo "$IP_INFO" | cut -d'/' -f2)
|
||||
|
||||
# Extraire le préfixe réseau (ex: "192.168.100")
|
||||
PREFIX=$(echo "$NETWORK_IP" | awk -F. '{print $1"."$2"."$3}')
|
||||
|
||||
# Calculer les bornes de la plage d'adresses IP en fonction du masque
|
||||
NETMASK=$(( 32 - NETMASK_CIDR ))
|
||||
TOTAL_HOSTS=$(( 2 ** NETMASK ))
|
||||
IP_RANGE_START="$PREFIX.1"
|
||||
IP_RANGE_END="$PREFIX.$(( TOTAL_HOSTS - 2 ))" # -2 pour exclure le broadcast
|
||||
|
||||
# Fichier contenant les réservations DHCP
|
||||
RESERVATION_FILE="/etc/dnsmasq.d/custom_hosts"
|
||||
|
||||
# Plage d'adresses IP à analyser (exemple : 192.168.1.100-192.168.1.200)
|
||||
IP_RANGE_START="192.168.1.100"
|
||||
IP_RANGE_END="192.168.1.200"
|
||||
|
||||
# Fonction pour convertir une IP en un entier pour la comparaison
|
||||
# Fonction pour convertir une IP en un entier
|
||||
ip_to_int() {
|
||||
local IFS=.
|
||||
local ip=($1)
|
||||
|
@ -29,23 +48,33 @@ fi
|
|||
# Lire toutes les IP utilisées dans le fichier de réservation
|
||||
USED_IPS=($(grep -oE 'address=/[^/]+/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' "$RESERVATION_FILE" | awk -F'/' '{print $3}'))
|
||||
|
||||
# Convertir les IP utilisées en entiers pour faciliter la recherche
|
||||
declare -A USED_IP_MAP
|
||||
# Si aucune IP n'est réservée, retourner la première adresse disponible
|
||||
if [[ ${#USED_IPS[@]} -eq 0 ]]; then
|
||||
echo "✅ Première IP disponible : $IP_RANGE_START"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Trouver la plus grande IP utilisée
|
||||
MAX_IP_INT=0
|
||||
for ip in "${USED_IPS[@]}"; do
|
||||
USED_IP_MAP[$(ip_to_int "$ip")]=1
|
||||
done
|
||||
|
||||
# Trouver la première IP disponible
|
||||
START_INT=$(ip_to_int "$IP_RANGE_START")
|
||||
END_INT=$(ip_to_int "$IP_RANGE_END")
|
||||
|
||||
for (( ip=START_INT; ip<=END_INT; ip++ )); do
|
||||
if [[ -z "${USED_IP_MAP[$ip]}" ]]; then
|
||||
FREE_IP=$(int_to_ip "$ip")
|
||||
echo "✅ Première IP disponible : $FREE_IP"
|
||||
exit 0
|
||||
ip_int=$(ip_to_int "$ip")
|
||||
if (( ip_int > MAX_IP_INT )); then
|
||||
MAX_IP_INT=$ip_int
|
||||
fi
|
||||
done
|
||||
|
||||
echo "❌ Aucune IP libre trouvée dans la plage définie."
|
||||
exit 1
|
||||
# Calculer la prochaine IP disponible
|
||||
NEXT_IP_INT=$((MAX_IP_INT + 1))
|
||||
NEXT_IP=$(int_to_ip "$NEXT_IP_INT")
|
||||
|
||||
# Vérifier que cette IP est bien dans la plage autorisée
|
||||
START_INT=$(ip_to_int "$IP_RANGE_START")
|
||||
END_INT=$(ip_to_int "$IP_RANGE_END")
|
||||
|
||||
if (( NEXT_IP_INT > END_INT )); then
|
||||
echo "❌ Plus aucune IP disponible dans la plage définie."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ Première IP disponible : $NEXT_IP"
|
||||
exit 0
|
||||
|
|
|
@ -0,0 +1,55 @@
|
|||
#!/bin/bash
|
||||
|
||||
# Fichier contenant les enregistrements
|
||||
FILE="/etc/dnsmasq.d/custom_hosts"
|
||||
|
||||
# Vérification de l'existence du fichier
|
||||
if [[ ! -f "$FILE" ]]; then
|
||||
echo "Erreur: Le fichier $FILE n'existe pas."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Vérification des arguments
|
||||
if [[ $# -ne 1 ]]; then
|
||||
echo "Usage: $0 <nom_machine|FQDN|adresse_IP>"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
SEARCH_TERM="$1"
|
||||
|
||||
# Détecter le nom de domaine depuis /etc/resolv.conf
|
||||
DOMAIN=$(awk '/^search / {print $2; exit} /^domain / {print $2; exit}' /etc/resolv.conf)
|
||||
|
||||
# Vérifier qu'on a bien trouvé un domaine
|
||||
if [[ -z "$DOMAIN" ]]; then
|
||||
echo "Erreur: Impossible de détecter le nom de domaine depuis /etc/resolv.conf."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Si l'entrée ne contient pas un point (ex: "www" au lieu de "www.domaine.local"), on ajoute le domaine détecté
|
||||
if [[ ! "$SEARCH_TERM" =~ \. ]]; then
|
||||
SEARCH_TERM="$SEARCH_TERM.$DOMAIN"
|
||||
fi
|
||||
|
||||
# Vérification si l'entrée est une adresse IP
|
||||
if [[ "$SEARCH_TERM" =~ ^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
||||
# Recherche stricte de l'adresse IP en tenant compte du format 'address=/FQDN/IP'
|
||||
RESULTS=$(grep -E "/$SEARCH_TERM\$" "$FILE")
|
||||
else
|
||||
# Vérification que le terme recherché est bien un FQDN valide
|
||||
if [[ ! "$SEARCH_TERM" =~ ^[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
|
||||
echo "Erreur: '$SEARCH_TERM' ne semble pas être un FQDN valide."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Recherche stricte du FQDN en tenant compte du format 'address=/FQDN/IP'
|
||||
RESULTS=$(grep -E "^address=/$SEARCH_TERM/" "$FILE")
|
||||
fi
|
||||
|
||||
# Vérification et affichage des résultats
|
||||
if [[ -n "$RESULTS" ]]; then
|
||||
echo "Résultats trouvés :"
|
||||
echo "$RESULTS"
|
||||
else
|
||||
echo "Aucun résultat trouvé pour '$SEARCH_TERM'."
|
||||
fi
|
Loading…
Reference in New Issue