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

103 lines
2.8 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Importer les fonctions communes
source "$(dirname "$0")/../common/common_utils.sh"
# Vérifier si le script est exécuté en root
check_root
# Vérifie si une IP est fournie
if [ -z "$1" ]; then
echo "Usage: $0 <IP>"
exit 1
fi
IP="$1"
echo "🔍 Recherche du nom d'hôte pour l'IP : $IP"
# Fonction pour vérifier si une commande est disponible
command_exists() {
command -v "$1" &> /dev/null
}
# Détection du serveur DNS en prenant en compte dnsmasq et fallback sur resolv.conf
get_dns_server() {
local dns_server=""
if command_exists resolvectl; then
dns_server=$(resolvectl dns | awk '/^Global:/ {print $2; exit}')
fi
if [ -z "$dns_server" ] && command_exists dnsmasq; then
dns_server=$(ss -tulpn | grep dnsmasq | awk '{print $5}' | cut -d: -f1 | head -n1)
fi
if [ -z "$dns_server" ] && [ -f /etc/resolv.conf ]; then
dns_server=$(grep -m1 '^nameserver' /etc/resolv.conf | awk '{print $2}')
fi
echo "${dns_server:-9.9.9.9}" # Utilisation d'un fallback 9.9.9.9 si aucun DNS trouvé
}
DNS_SERVER=$(get_dns_server)
echo "🛜 Serveur DNS détecté : $DNS_SERVER"
# 1⃣ Test LLMNR (Link-Local Multicast Name Resolution)
if command_exists resolvectl; then
HOSTNAME_LLMNR=$(resolvectl query "$IP" 2>/dev/null | grep -oP '(?<=Name:\s).*' | head -n1)
if [ -n "$HOSTNAME_LLMNR" ]; then
echo "✅ LLMNR: $HOSTNAME_LLMNR"
exit 0
fi
else
echo "⚠ LLMNR non disponible (resolvectl absent)"
fi
# 2⃣ Test mDNS (Multicast DNS / Avahi)
if command_exists avahi-resolve; then
HOSTNAME_MDNS=$(avahi-resolve -a "$IP" 2>/dev/null | awk '{print $2}')
if [ -n "$HOSTNAME_MDNS" ]; then
echo "✅ mDNS (Avahi): $HOSTNAME_MDNS"
exit 0
fi
else
echo "⚠ mDNS non disponible (avahi-resolve absent)"
fi
# 3⃣ Vérification du cache ARP
if command_exists arp; then
HOSTNAME_ARP=$(arp -a | grep "$IP" | awk '{print $1}')
if [ -n "$HOSTNAME_ARP" ]; then
echo "✅ ARP: $HOSTNAME_ARP"
exit 0
fi
else
echo "⚠ ARP non disponible"
fi
# 4⃣ Vérification via NetBIOS (Windows/Samba)
if command_exists nmblookup; then
HOSTNAME_NETBIOS=$(nmblookup -A "$IP" 2>/dev/null | grep -m1 '<00>' | awk '{print $1}')
if [ -n "$HOSTNAME_NETBIOS" ]; then
echo "✅ NetBIOS: $HOSTNAME_NETBIOS"
exit 0
fi
else
echo "⚠ NetBIOS non disponible (nmblookup absent)"
fi
# 5⃣ Scan réseau avec Nmap pour identifier l'hôte
if command_exists nmap; then
HOSTNAME_NMAP=$(nmap --dns-servers "$DNS_SERVER" -sP "$IP" 2>/dev/null | grep "Nmap scan report" | awk '{print $5}')
if [ -n "$HOSTNAME_NMAP" ]; then
echo "✅ Nmap: $HOSTNAME_NMAP"
exit 0
fi
else
echo "⚠ Nmap non disponible"
fi
echo "❌ Aucune correspondance trouvée."
exit 1