Simple script pour le shell standard de FreeBSD.
On lui entre autant de réseaux qu'on veut, et il lance parallèlement arp-scan pour chaque réseau entré.
#!/bin/sh
clear
echo '--------------------------------------------------------------'
echo 'Ce script permet de scanner plusieurs réseaux en même temps.'
echo 'Il utilise arp-scan pour effectuer les requêtes arp.'
echo 'Les résultats s'\''affichent au fur et à mesure.'
printf '\n'
read -p 'Entrer les réseaux à scanner (ex : 192.168.0.0/16 172.16.18.0/24) : ' networks
# Définir les réseaux à scanner en fixe autrement :
# networks='192.168.0.0/16 172.16.0.0/12'
clear
# Vérifier si les applications sont bien installées :
pkg info -e arp-scan >/dev/null 2>&1 || pkg install -y arp-scan
pkg info -e nbtscan >/dev/null 2>&1 || pkg install -y nbtscan
clear
# Fonction pour scanner IPv4 avec arp-scan et résoudre les noms d'hôtes
scan_and_resolve() {
network='$1'
mask='$2'
safe_network=$(echo '$network' | tr '.' '_')
echo 'Scan IPv4 du réseau $network/$mask en cours ...'
# Créer un fichier temporaire pour les résultats
tmp_file=$(mktemp)
# Ajustement des paramètres de retry et timeout pour accélérer le scan
sudo arp-scan --retry=3 --timeout=1000 '$network/$mask' | grep -vE 'Interface|Starting|Ending|packets|^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/[0-9]+$' | while read -r line; do
if [ -n '$line' ]; then
ip=$(echo '$line' | awk '{print $1}')
mac=$(echo '$line' | awk '{print $2}')
# Résoudre le nom d'hôte
hostname=$(host '$ip' 2>/dev/null | awk '{print $5}' | sed 's/\.$//')
if [ -z '$hostname' ] || [ '$hostname' = '3(NXDOMAIN)' ]; then
nbtsname=$(sudo nbtscan -q -s : '$ip' 2>/dev/null | cut -d: -f2)
if [ -n '$nbtsname' ]; then
hostname='$nbtsname'
else
hostname='N/A'
fi
fi
echo '$ip ($mac) - $hostname' >> '$tmp_file'
fi
done
# Afficher les résultats
echo ''
echo 'Résultats pour le réseau $network/$mask :'
echo '--------------------------------------'
if [ -s '$tmp_file' ]; then
cat '$tmp_file'
count=$(wc -l < '$tmp_file')
echo ''
echo 'Nombre d'\''hôtes trouvés : $count'
else
echo 'Aucun hôte trouvé.'
fi
echo ''
# Nettoyer le fichier temporaire
rm -f '$tmp_file'
}
# Lancer les scans en parallèle
for network in $networks; do
net=$(echo '$network' | cut -d'/' -f1)
mask=$(echo '$network' | cut -d'/' -f2)
scan_and_resolve '$net' '$mask' &
done
# Attendre que tous les scans soient terminés
wait
echo 'Tous les scans sont terminés.'