• 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 Tags : , , , ,
  • Commentaires

    Aucun commentaire pour le moment

    Suivre le flux RSS des commentaires


    Ajouter un commentaire

    Nom / Pseudo :

    E-mail (facultatif) :

    Site Web (facultatif) :

    Commentaire :