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?
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:
C'est un outil très utile à apprendre.
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).
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.
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
À 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
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
j'espère vous aider
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.