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


94

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?


4
essayerangry ip scanner
Web-E


2
sérieusement? vous voulez que notre aide blague vos collègues?
Dan H

Réponses:


141

En général, il nmapest très utile d'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.


2
Tous les hôtes ne répondent pas aux pings. ARP est la voie à suivre, du moins en IPv4.
Marcin Kaminski

3
c'est assez pour moi et ça marche sur internet

1
S'agit-il uniquement de mon ordinateur ou cette commande prend-elle une éternité?
JohnMerlino

4
Remarque: pour accélérer l'analyse nmap, vous devez ajouter les indicateurs -T4 (vitesse) et -n (uniquement numérique).
Sergiy Kolodyazhnyy

3
N'oubliez pas que vous avez besoin de la commande sudo for nmap, sinon aucun résultat ne sera renvoyé.
machineaddict

40

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 effectuant:

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-scanenvoie 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).


3
Cette commande est certainement meilleure que celle ci-dessus. Exécuter nmap a pris un temps fou, mais celui-ci a répondu instantanément avec les nœuds du réseau spécifié.
JohnMerlino

3
Dans mon cas, très souvent, arp-scanne trouve pas tous les périphériques associés à mon réseau sans fil. Maintenant, par exemple, sudo arp-scan 192.168.2.0/24montre 2 résultats (.1 et .1), alors que nmap -sn 192.168.2.0/24montre 4 résultats (.1, .2, .3 et .4). Donc, il semble que ce nmapsoit plus précis (je sais avec certitude que 4 périphériques sont connectés au réseau). Pourquoi est-ce?
Tigerjack89

2
J'ai peut-être trouvé la réponse dans un commentaire à une autre question. "Il convient de noter que certains périphériques risquent de ne pas s'afficher s'ils ne sont pas allumés. Mon lien 4 ne s'affichera que si l'écran est allumé." Cependant, il est intéressant de noter que les mêmes appareils répondent toujours aux pings de nmap.
Tigerjack89

arp-scanc'est sympa!
forzagreen

17

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

nmapserait mon choix n ° 1, mais que faire 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 définissons le dernier chiffre de l'adresse, faisons un ping unique silencieux à l'adresse, vérifions si la commande aboutit ou non (et si elle réussit, l'hôte est évidemment actif) et la printfdéclaration. 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, et 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 pingattend la réponse de l'hôte. Par défaut, pingpour deux RTT, cela 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 (du moins en fonction de cela ). Donc, nous pourrions forcer pingle temps mort avec le -w 1drapeau. É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 statut de sortie avec $?n'était pas vraiment nécessaire. Le if ... then;...fipeut 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 printfcommande peut être réécrite de la manière suivante:

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

    Il s’agit plutôt d’un changement stylistique, mais cohérent avec le printffonctionnement et l’apparence de beaucoup de langues, avec la citation de "$NUM"variable. Il n'est pas nécessaire de citer ici - comme nous ne traitons que de chiffres, nous n'avons pas besoin d'anticiper le fractionnement des mots car il y a des 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 le pinget printfdans une fonction pingf(oui, nom ringard, je sais). Maintenant, il y a aussi une seule mainfonction qui fait la 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 ça marche 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.

2
J'aime ce genre de solution
Szenis


4

fpingest 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 comme Up s'il obtient ECHO_RESPONSE de l'hôte.

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

fping -g 192.168.1.0/24

Pour un nombre spécifique d'hôtes, par exemple 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 fpingpour avoir plus d'idée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.