Récupérer les Informations Réseau sur macOS
Collectez des informations réseau détaillées de vos appareils MacFleet en utilisant des outils en ligne de commande. Ce tutoriel couvre la découverte d'adresses MAC, la configuration IP, la surveillance des ports et les diagnostics réseau pour une gestion complète de flotte.
Comprendre les Informations Réseau macOS
macOS fournit plusieurs utilitaires en ligne de commande pour la collecte d'informations réseau :
networksetup
- Gestion des ports matériels et configuration réseauifconfig
- Configuration et statut des interfaces réseaunetstat
- Connexions réseau et informations de portsarp
- Gestion de la table du protocole de résolution d'adresseipconfig
- Configuration des adresses IP et DHCP
Récupérer les Adresses MAC
Lister Tous les Ports Matériels
#!/bin/bash
# Afficher tous les ports matériels réseau et leurs adresses MAC
networksetup -listallhardwareports
echo "Informations des ports matériels récupérées avec succès"
Obtenir l'Adresse MAC d'une Interface Spécifique
#!/bin/bash
# Obtenir l'adresse MAC pour une interface spécifique (Wi-Fi)
echo "Adresse MAC de l'Interface Wi-Fi (en0) :"
networksetup -getmacaddress en0
echo -e "\nAdresse MAC de l'Interface Ethernet (en1) :"
networksetup -getmacaddress en1
echo -e "\nAdresse MAC du Pont Thunderbolt (bridge0) :"
networksetup -getmacaddress bridge0 2>/dev/null || echo "Pont Thunderbolt non disponible"
Rapport Complet d'Adresses MAC
#!/bin/bash
# Générer un rapport détaillé d'adresses MAC
echo "=== Rapport Matériel Réseau MacFleet ==="
echo "Appareil : $(hostname)"
echo "Date : $(date)"
echo "========================================="
# Obtenir tous les ports matériels
echo -e "\n📡 Inventaire Matériel Réseau :"
networksetup -listallhardwareports
echo -e "\n🔍 Détails des Interfaces Principales :"
echo "Wi-Fi (en0) : $(networksetup -getmacaddress en0 | awk '{print $3}')"
echo "Ethernet (en1) : $(networksetup -getmacaddress en1 | awk '{print $3}' 2>/dev/null || echo 'Non disponible')"
# Vérifier les interfaces supplémentaires
echo -e "\n🌐 Interfaces Supplémentaires :"
for i in {2..5}; do
mac_addr=$(networksetup -getmacaddress en$i 2>/dev/null | awk '{print $3}')
if [[ -n "$mac_addr" && "$mac_addr" != "not" ]]; then
echo "en$i : $mac_addr"
fi
done
Découvrir les Adresses IP
Récupération Basique d'Adresses IP
#!/bin/bash
# Obtenir l'adresse IP pour l'interface Wi-Fi
WIFI_IP=$(ipconfig getifaddr en0 2>/dev/null)
ETHERNET_IP=$(ipconfig getifaddr en1 2>/dev/null)
echo "Adresses IP Réseau :"
echo "Wi-Fi (en0) : ${WIFI_IP:-Non connecté}"
echo "Ethernet (en1) : ${ETHERNET_IP:-Non connecté}"
Configuration IP Complète
#!/bin/bash
# Rapport détaillé de configuration IP
echo "=== Rapport de Configuration IP MacFleet ==="
echo "Appareil : $(hostname)"
echo "Horodatage : $(date)"
echo "========================================"
# Interfaces réseau actives
echo -e "\n🌐 Interfaces Réseau Actives :"
for interface in en0 en1 en2 en3; do
ip_addr=$(ipconfig getifaddr $interface 2>/dev/null)
if [[ -n "$ip_addr" ]]; then
echo "$interface : $ip_addr"
# Obtenir des détails supplémentaires pour les interfaces actives
subnet_mask=$(ipconfig getoption $interface subnet_mask 2>/dev/null)
router=$(ipconfig getoption $interface router 2>/dev/null)
dns_servers=$(ipconfig getoption $interface domain_name_server 2>/dev/null)
echo " Sous-réseau : ${subnet_mask:-N/A}"
echo " Passerelle : ${router:-N/A}"
echo " DNS : ${dns_servers:-N/A}"
echo ""
fi
done
# Adresse IP publique
echo "🌍 Adresse IP Externe :"
curl -s ifconfig.me 2>/dev/null || echo "Impossible de récupérer l'IP externe"
Statut des Interfaces Réseau
#!/bin/bash
# Surveiller le statut des interfaces réseau
echo "=== Surveillance du Statut des Interfaces Réseau ==="
# Obtenir les statistiques d'interface
echo -e "\n📊 Statistiques des Interfaces :"
ifconfig | grep -E "(en[0-9]:|inet |status:|media:)" | while read line; do
echo "$line"
done
echo -e "\n🔄 Informations de Bail DHCP :"
for interface in en0 en1; do
lease_info=$(ipconfig getpacket $interface 2>/dev/null)
if [[ -n "$lease_info" ]]; then
echo "Interface $interface :"
echo "$lease_info" | grep -E "(lease_time|server_identifier|domain_name)"
echo ""
fi
done
Analyser la Configuration Réseau
Vue d'Ensemble Réseau Complète
#!/bin/bash
# Analyse complète de la configuration réseau
echo "=== Vue d'Ensemble Réseau Complète ==="
ifconfig
echo -e "\n🔍 Résumé Réseau :"
ifconfig | grep -E "^[a-z]" | while read line; do
interface=$(echo $line | cut -d: -f1)
status=$(ifconfig $interface | grep "status:" | cut -d' ' -f2-)
echo "$interface : ${status:-actif}"
done
Services Réseau et DNS
#!/bin/bash
# Configuration des services réseau et DNS
echo "=== Configuration des Services Réseau ==="
echo "🌐 Configuration DNS :"
echo "Serveurs DNS Système :"
scutil --dns | grep "nameserver" | head -5
echo -e "\n📡 Services Réseau :"
networksetup -listallnetworkservices
echo -e "\n🔍 Détails du Service Réseau Actif :"
active_service=$(networksetup -listallnetworkservices | grep -v "asterisk" | head -2 | tail -1)
if [[ -n "$active_service" ]]; then
echo "Service : $active_service"
networksetup -getinfo "$active_service"
fi
Informations de Sous-réseau et Routage
#!/bin/bash
# Informations de masque de sous-réseau et routage
echo "=== Informations de Routage et Sous-réseau ==="
echo "🛣️ Table de Routage :"
netstat -rn | head -10
echo -e "\n🔍 Détails de Sous-réseau d'Interface :"
for interface in en0 en1; do
ip_addr=$(ipconfig getifaddr $interface 2>/dev/null)
if [[ -n "$ip_addr" ]]; then
subnet_mask=$(ipconfig getoption $interface subnet_mask 2>/dev/null)
echo "$interface : $ip_addr/${subnet_mask:-inconnu}"
fi
done
Surveiller les Informations de Ports
Connexions TCP Actives
#!/bin/bash
# Afficher les connexions TCP actives
echo "=== Connexions TCP Actives ==="
netstat -ap TCP
echo -e "\n📊 Résumé des Connexions :"
echo "Total connexions : $(netstat -ap TCP | grep -c ESTABLISHED)"
echo "Ports en écoute : $(netstat -ap TCP | grep -c LISTEN)"
echo "Connexions time-wait : $(netstat -ap TCP | grep -c TIME_WAIT)"
Analyse des Ports en Écoute
#!/bin/bash
# Analyser les ports en écoute
echo "=== Analyse des Ports en Écoute ==="
echo "🔍 Tous les Ports en Écoute :"
netstat -a | grep -i "LISTEN"
echo -e "\n📋 Résumé des Ports en Écoute :"
netstat -a | grep -i "LISTEN" | awk '{print $4}' | cut -d. -f2 | sort -n | uniq -c | sort -nr
echo -e "\n🔒 Ports Pertinents pour la Sécurité :"
netstat -a | grep -i "LISTEN" | grep -E ":(22|80|443|993|995|587|25|53|21|23) "
Script de Surveillance des Ports
#!/bin/bash
# Surveillance complète des ports
LOG_FILE="/var/log/macfleet_ports.log"
monitor_ports() {
local timestamp=$(date '+%Y-%m-%d %H:%M:%S')
{
echo "=== Rapport de Surveillance des Ports ==="
echo "Horodatage : $timestamp"
echo "Appareil : $(hostname)"
echo "================================"
echo -e "\n🔍 Ports en Écoute Actuels :"
netstat -a | grep -i "LISTEN" | head -20
echo -e "\n📊 Statistiques de Connexion :"
echo "ESTABLISHED : $(netstat -ap TCP | grep -c ESTABLISHED)"
echo "LISTEN : $(netstat -ap TCP | grep -c LISTEN)"
echo "TIME_WAIT : $(netstat -ap TCP | grep -c TIME_WAIT)"
echo "CLOSE_WAIT : $(netstat -ap TCP | grep -c CLOSE_WAIT)"
echo -e "\n🚨 Connexions Suspectes :"
netstat -ap TCP | grep -E ":(6667|6697|8080|9050|4444|31337)" || echo "Aucune détectée"
} | tee -a "$LOG_FILE"
}
# Exécuter la surveillance
monitor_ports
Afficher la Table ARP
Informations ARP Basiques
#!/bin/bash
# Afficher la table du protocole de résolution d'adresse
arp -a
echo "Table ARP récupérée avec succès"
Analyse Détaillée ARP
#!/bin/bash
# Analyse complète de la table ARP
echo "=== Analyse de la Table ARP ==="
echo "Appareil : $(hostname)"
echo "Date : $(date)"
echo "=========================="
echo -e "\n🔍 Table ARP Complète :"
arp -a
echo -e "\n📊 Statistiques ARP :"
total_entries=$(arp -a | wc -l)
incomplete_entries=$(arp -a | grep -c "incomplete")
complete_entries=$((total_entries - incomplete_entries))
echo "Total entrées ARP : $total_entries"
echo "Entrées complètes : $complete_entries"
echo "Entrées incomplètes : $incomplete_entries"
echo -e "\n🌐 Voisins Réseau :"
arp -a | head -10 | while read line; do
hostname=$(echo $line | cut -d' ' -f1)
ip=$(echo $line | cut -d'(' -f2 | cut -d')' -f1)
mac=$(echo $line | cut -d' ' -f4)
echo "$ip -> $mac ($hostname)"
done
Vérification de Sécurité ARP
#!/bin/bash
# Analyse de sécurité de la table ARP
echo "=== Analyse de Sécurité ARP ==="
# Vérifier les adresses MAC dupliquées (potentiel ARP spoofing)
echo "🔒 Vérification des Adresses MAC Dupliquées :"
arp -a | awk '{print $4}' | sort | uniq -d | while read mac; do
if [[ -n "$mac" ]]; then
echo "⚠️ MAC dupliquée détectée : $mac"
arp -a | grep "$mac"
fi
done
# Vérifier les modèles suspects
echo -e "\n🚨 Alertes de Sécurité :"
suspicious_count=$(arp -a | grep -c "incomplete")
if [[ $suspicious_count -gt 10 ]]; then
echo "⚠️ Nombre élevé d'entrées ARP incomplètes : $suspicious_count"
fi
# Analyse des fournisseurs réseau
echo -e "\n🏢 Analyse des Fournisseurs Réseau :"
arp -a | grep -E "([0-9a-f]{2}:){5}[0-9a-f]{2}" | awk '{print $4}' | cut -d: -f1-3 | sort | uniq -c | sort -nr | head -5
Script de Surveillance Réseau d'Entreprise
#!/bin/bash
# Suite de Surveillance Réseau d'Entreprise MacFleet
LOG_FILE="/var/log/macfleet_network.log"
REPORT_FILE="/tmp/network_report_$(date +%Y%m%d_%H%M%S).txt"
# Fonction de journalisation
log_action() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" | tee -a "$LOG_FILE"
}
# Générer un rapport réseau complet
generate_network_report() {
{
echo "Rapport d'Évaluation Réseau MacFleet"
echo "Généré : $(date)"
echo "Appareil : $(hostname)"
echo "Utilisateur : $(whoami)"
echo "Version OS : $(sw_vers -productVersion)"
echo "=========================================="
echo ""
# Inventaire matériel
echo "🔧 Matériel Réseau :"
networksetup -listallhardwareports
echo ""
# Configuration IP
echo "🌐 Configuration IP :"
for interface in en0 en1 en2; do
ip_addr=$(ipconfig getifaddr $interface 2>/dev/null)
if [[ -n "$ip_addr" ]]; then
echo "$interface : $ip_addr"
mac_addr=$(networksetup -getmacaddress $interface | awk '{print $3}')
echo " MAC : $mac_addr"
subnet=$(ipconfig getoption $interface subnet_mask 2>/dev/null)
router=$(ipconfig getoption $interface router 2>/dev/null)
echo " Sous-réseau : ${subnet:-N/A}"
echo " Passerelle : ${router:-N/A}"
echo ""
fi
done
# Services réseau
echo "📡 Services Réseau :"
networksetup -listallnetworkservices | grep -v "asterisk"
echo ""
# Configuration DNS
echo "🔍 Configuration DNS :"
scutil --dns | grep "nameserver" | head -3
echo ""
# Évaluation de sécurité
echo "🔒 Évaluation de Sécurité :"
listening_ports=$(netstat -a | grep -c "LISTEN")
established_connections=$(netstat -ap TCP | grep -c ESTABLISHED)
echo "Ports en écoute : $listening_ports"
echo "Connexions actives : $established_connections"
# Vérifier les ports de sécurité courants
security_ports=$(netstat -a | grep -i "LISTEN" | grep -E ":(22|80|443|993|995)" | wc -l)
echo "Ports pertinents pour la sécurité : $security_ports"
echo ""
echo "Rapport terminé à : $(date)"
} > "$REPORT_FILE"
echo "📊 Rapport réseau généré : $REPORT_FILE"
}
# Test de connectivité réseau
test_connectivity() {
echo "=== Test de Connectivité Réseau ==="
# Test de résolution DNS
if nslookup google.com > /dev/null 2>&1; then
echo "✅ Résolution DNS : Fonctionnelle"
else
echo "❌ Résolution DNS : Échec"
fi
# Test de connectivité internet
if ping -c 1 8.8.8.8 > /dev/null 2>&1; then
echo "✅ Connectivité internet : Fonctionnelle"
else
echo "❌ Connectivité internet : Échec"
fi
# Test de passerelle locale
gateway=$(route -n get default | grep gateway | awk '{print $2}')
if [[ -n "$gateway" ]] && ping -c 1 "$gateway" > /dev/null 2>&1; then
echo "✅ Connectivité passerelle : Fonctionnelle ($gateway)"
else
echo "❌ Connectivité passerelle : Échec"
fi
}
# Exécution principale
main() {
log_action "=== Surveillance Réseau MacFleet Démarrée ==="
generate_network_report
echo ""
test_connectivity
log_action "Surveillance réseau terminée. Rapport : $REPORT_FILE"
}
# Exécuter la fonction principale
main "$@"
Référence des Informations Réseau
Interfaces Réseau Courantes
Interface | Description | Usage Courant |
---|---|---|
en0 | Interface réseau principale | Connexion Wi-Fi |
en1 | Interface secondaire | Connexion Ethernet |
en2-en5 | Interfaces supplémentaires | Adaptateurs USB, Thunderbolt |
lo0 | Interface de bouclage | Communication système locale |
bridge0 | Pont Thunderbolt | Connexions appareil-à-appareil |
utun0-utun3 | Interfaces tunnel | Connexions VPN |
Référence Rapide des Commandes Réseau
# Obtenir l'IP d'interface
ipconfig getifaddr en0
# Obtenir la configuration d'interface
ipconfig getoption en0 subnet_mask
ipconfig getoption en0 router
ipconfig getoption en0 domain_name_server
# Matériel réseau
networksetup -listallhardwareports
networksetup -getmacaddress en0
# Statut d'interface
ifconfig en0
ifconfig -a
# Connexions réseau
netstat -rn # Table de routage
netstat -i # Statistiques d'interface
netstat -ap TCP # Connexions TCP
# Opérations ARP
arp -a # Afficher la table ARP
arp -d hostname # Supprimer l'entrée ARP
Diagnostics Réseau Avancés
Test de Performance Réseau
#!/bin/bash
# Diagnostics de performance réseau
echo "=== Diagnostics de Performance Réseau ==="
# Statistiques d'interface
echo "📊 Statistiques d'Interface :"
netstat -i
# Surveillance de bande passante
echo -e "\n🚀 Activité Réseau (10 secondes) :"
if command -v nettop >/dev/null 2>&1; then
timeout 10 nettop -l 1 -J bytes_in,bytes_out -P
else
echo "nettop non disponible, utilisation de netstat"
netstat -i
fi
# Test de latence
echo -e "\n⏱️ Tests de Latence :"
echo "DNS Google (8.8.8.8) :"
ping -c 3 8.8.8.8 | tail -1
echo "DNS Cloudflare (1.1.1.1) :"
ping -c 3 1.1.1.1 | tail -1
Informations Réseau Sans Fil
#!/bin/bash
# Informations détaillées du réseau sans fil
echo "=== Analyse du Réseau Sans Fil ==="
# Informations Wi-Fi actuelles
current_wifi=$(networksetup -getairportnetwork en0)
echo "Wi-Fi actuel : $current_wifi"
# Statut d'alimentation Wi-Fi
wifi_power=$(networksetup -getairportpower en0)
echo "Alimentation Wi-Fi : $wifi_power"
# Réseaux disponibles (nécessite des privilèges admin)
echo -e "\n📡 Réseaux Disponibles :"
if [[ $EUID -eq 0 ]]; then
airport -s 2>/dev/null || echo "Utilitaire Airport non disponible"
else
echo "Privilèges admin requis pour le scan réseau"
fi
# Détails de l'interface Wi-Fi
echo -e "\n🔍 Détails de l'Interface Wi-Fi :"
ifconfig en0 | grep -E "(inet|ether|status)"
Notes Importantes
- Noms d'interface peuvent varier entre les versions macOS et le matériel
- Privilèges administrateur requis pour certaines opérations réseau
- Implications de sécurité - Surveiller régulièrement les ports ouverts et connexions
- Impact sur les performances - Les scripts de surveillance réseau peuvent affecter les performances système
- Considérations de confidentialité - Les tables ARP contiennent des informations sur les voisins réseau
Dépannage
Problèmes Réseau Courants
Pas d'Adresse IP :
# Renouveler le bail DHCP
sudo ipconfig set en0 DHCP
Problèmes de Résolution DNS :
# Vider le cache DNS
sudo dscacheutil -flushcache
Interface Non Responsive :
# Réinitialiser l'interface réseau
sudo ifconfig en0 down
sudo ifconfig en0 up
N'oubliez pas de tester ces scripts sur des appareils individuels avant de les déployer dans votre environnement MacFleet.