-
Effectuer un scan réseau rapide et parallélisé en IPv4
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."
Tags : scan, réseau, network, arp-scan, détection
-
Commentaires