web-dev-qa-db-fra.com

Comment trouver toutes les adresses IP utilisées sur un réseau

Dans mon travail, il y a beaucoup d'ordinateur et je veux faire une blague. Je peux fermer un ordinateur via le réseau, mais il m'est difficile de trouver des adresses IP.

Comment trouver facilement toutes les adresses IP en ligne de 192.168.1.aa à 192.168.1.zz?

89
user84277

nmap est généralement utile pour analyser rapidement les réseaux.

Pour installer nmap, entrez la commande suivante dans le terminal:

Sudo apt-get install nmap

Une fois l'application installée, entrez la commande suivante:

nmap -sn 192.168.1.0/24

Cela vous indiquera quels hôtes ont répondu aux requêtes ping sur le réseau entre 192.168.1.0 et 192.168.1.255.


Pour les anciennes versions de Nmap, utilisez -sP:

nmap -sP 192.168.1.0/24

Pour des références supplémentaires, voir les pages suivantes:

Guide d'installation NMAP

Guide de référence NMAP

C'est un outil très utile à apprendre.

134
Kevin Bowen

Si tous les ordinateurs de votre réseau sont Ubuntu ou toute autre distribution utilisant avahi-daemon ( DNS-SD ), vous pouvez obtenir une liste détaillée d’entre eux (avec nom d’hôte et adresse IP) en procédant comme suit:

avahi-browse -rt _workstation._tcp

Si vous souhaitez connaître toutes les adresses IP utilisées sur votre réseau, vous pouvez utiliser arp-scan:

Sudo arp-scan 192.168.1.0/24

Comme il n'est pas installé par défaut, vous devrez l'installer avec Sudo apt-get install arp-scan. arp-scan envoie des paquets ARP au réseau local et affiche les réponses reçues, de sorte que même les hôtes protégés par un pare-feu (qui bloquent le trafic en fonction des paquets IP).

39
Eric Carvalho

Note au lecteur : La réponse originale a été postée il y a longtemps et à l'époque où j'apprenais seulement à écrire des scripts Shell. Voir la version révisée ci-dessous pour un nouveau script amélioré qui s'exécute beaucoup plus rapidement.

Réponse originale

nmap serait mon premier choix, mais si vous ne l'avez pas? Le bricolage consisterait en un script ping qui passe manuellement chaque adresse IP possible sur le réseau. Ce que nous avons ici est juste une boucle While, où nous avons défini le dernier numéro de l'adresse, rendu le ping unique silencieux à l'adresse, vérifié si la commande aboutissait ou non (et si elle réussissait, alors l'hôte est évidemment actif) et l'instruction printf . Rapide et sale, il m’a pris environ 10 minutes pour l’écrire, mais l’exécution peut être un peu lente, cependant.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Réponse revisitée

À l'origine, j'avais posté cette réponse en août 2015. Depuis, j'en ai appris un peu plus sur les scripts Shell. Une fois que j'ai vu ce script, j'ai pensé que ce serait une bonne idée de revoir cette réponse pour y apporter quelques améliorations. Voici quelques idées:

  • Le script est évidemment lent et ping attend la réponse de l'hôte. Par défaut, ping pour deux RTT, qui peut varier en fonction de la densité de votre réseau, et, autant que je sache, le protocole TCP double le temps d'attente à chaque fois (au moins selon ceci ). Nous pourrions donc forcer ping à expirer avec le drapeau -w 1. Étant donné que nous avons 256 adresses et que nous supposons 1 seconde pour chaque adresse, le script prendra environ 256/60 = 4,27 minutes.

  • Faire une commande puis capturer son état de sortie avec $? n'était pas vraiment nécessaire. Le if ... then;...fi peut opérer directement sur les commandes. En d'autres termes, il suffit de faire ceci:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • La commande printf peut être réécrite de la manière suivante:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Il s’agit là d’un changement stylistique, mais cohérent avec le fonctionnement de printf et de son apparence dans de nombreuses autres langues, avec la mention de la variable "$NUM". Citer ici n'est pas nécessaire - comme nous ne traitons que des chiffres, nous n'avons pas besoin d'anticiper le fractionnement de Word en raison de la présence d'espaces dans une variable.

  • Il est possible d’améliorer considérablement les performances en générant plusieurs processus en arrière-plan. Le script ci-dessous fait exactement cela. Je mets les ping_ et printf_ dans une fonction, pingf (oui, nom ringard, je sais). Maintenant, il existe également une seule fonction main qui effectue la mise en boucle et l’appel de pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

A quel point cela fonctionne-t-il mieux? Pas mal, en fait, prend quelques secondes.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Choses à garder à l'esprit

  • Windows (à partir de Windows 7, je pense) ont commencé à bloquer la réponse aux demandes d'écho ICMP. Ask Ubuntu et d'autres sites du même genre suscitent de nombreuses questions à ce sujet. "Hé, mon ordinateur Linux peut être traité, mais pas sous Windows, qu'est-ce qui se passe avec ça?" Sachez simplement que pour les versions Windows plus récentes, vous devez activer la réponse à l'écho ICMP.
17

Netdiscover peut être votre réponse.

Pour installer via un terminal:

Sudo apt-get install netdiscover

exemple d'utilisation:

Sudo netdiscover -r 192.168.1.0/24 -i wlan0

Une adresse IP avec adresses MAC s'affichera sur votre terminal. Voir la capture d'écran

enter image description here

j'espère vous aider

référence

15
SP3B

fping est un excellent outil pour analyser plusieurs hôtes sur un réseau via ICMP. S'il n'est pas installé, vous pouvez l'installer en:

Sudo apt-get install fping

fping envoie les paquets ICMP ECHO_REQUEST et marque un hôte en tant que Up s'il reçoit ECHO_RESPONSE de l'hôte.

Par exemple, pour analyser les hôtes du sous-réseau 192.168.1.0/24, vous pouvez procéder comme suit:

fping -g 192.168.1.0/24

Pour un nombre spécifique d'hôtes, par ex. de 192.168.1.15 à 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping est hautement configurable, par exemple. combien de paquets seront envoyés, le temps d'attente pour la réponse, le format de sortie, etc.

Vérifiez man fping pour avoir plus d’idées.

4
heemayl