Scan des entrées ARP de votre réseau local en PowerShell
J’ai réalisé un script en PowerShell dont l’objet est de scanner votre réseau par des ping et de consigner les données de la table ARP dans un fichier de logs. Sont exclus toutes les machines distantes dont que le pare-feu ne bloque le protocole ICMP en entrée.
Le protocole ARP
Le protocole ARP est utilisé au niveau du protocole IPv4 pour établir la correspondance entre votre adresse IP et votre adresse MAC. Quel que soit le système d’exploitation, cette table est consultable à l’aide de la commande arp -a. ARP a été remplacé sur IPv6 par le protocole NDP.
Le script PowerShell
Les réseaux privés en 192.168.0.0/16, 172.16.0.0/12 ou 10.0.0.0 nécessité une double, voir une triple boucle. Le script est sur Pastebin.
Clear #fichier de logs $logfile='d:\arp.log' $logs=@() $cmd=@() #Récupération du contenu du fichier de logs existant If(Test-Path -Path $logfile) { $logs+=Import-CSV -Path $logfile } $date=Get-Date #Balayage par ping du réseau 192.168.1.0/24 For($i=1;$i -lt 255;$i++) { $ping=ping 192.168.1.$i -n 1 -w 5 #Récupération de la commande arp -a toutes les 60 secondes If($date.AddSeconds(60) -lt (Get-Date)) { $cmd+=arp -a $date=Get-Date } } $cmd+=arp -a #Elimination des doublons du fait de l'exécution régulière de arp -a $cmd=$cmd|Sort -Unique #Récupération des adresses ip et mac ForEach($row in $cmd) { If($row -match '^ +([0-9\.]+) +([0-9a-f\-]+) +[a-z]+ +$') { $ip=$Matches[1] $mac=$Matches[2] $logs+=[PSCustomObject]@{date=$date;ip=$ip;mac=$mac} } } #Sauvegarde des données de la table arp dans le fichier de logs $logs| Export-CSV -NoTypeInformation -Path $logfile #Facultatif : affichage des résultats si vous exécutez le script en mode interactif $logs|Out-GridView -Title 'Log Arp Scan' $logs=$null
Le résultat
Les adresses préfixées 224 et 239 sont des adresses de multicast.