notes-techniques/scripts/server-dhcp/find_hostname.sh

64 lines
1.7 KiB
Bash

#!/bin/bash
# Basé sur un travail de Cédric Abonnel / Cédrix sous licence CC BY-NC 4.0
# 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étection du nom de domaine
if [[ -f /etc/resolv.conf ]]; then
DOMAIN=$(awk '/^search / {print $2; exit} /^domain / {print $2; exit}' /etc/resolv.conf)
fi
# Alternative si resolv.conf n'existe pas ou est vide
if [[ -z "$DOMAIN" ]]; then
DOMAIN=$(hostname --domain 2>/dev/null) # Essayer avec hostname
if [[ -z "$DOMAIN" ]]; then
DOMAIN=$(nmcli -t -f IP4.DOMAIN dev show | head -n 1) # Essayer avec nmcli
fi
fi
# Vérifier qu'on a bien trouvé un domaine
if [[ -z "$DOMAIN" ]]; then
echo "Erreur: Impossible de détecter le nom de domaine."
exit 1
fi
# Si l'entrée ne contient pas un point, 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
RESULTS=$(grep -E "/$SEARCH_TERM\$" "$FILE")
else
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
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