Comment puis-je lister toutes les IP du réseau connecté, via Terminal de préférence?

219

À l'aide d'Ubuntu 10.10, je me demandais s'il existait une commande de ligne de commande permettant de répertorier toutes les adresses IP des périphériques connectés au réseau.

J'utiliserais cela par exemple pour répertorier tous les ordinateurs connectés à mon réseau domestique. Idéalement, il doit être en ligne de commande car je vais l'exécuter à partir de C ++.

Des idées?

Christopher Gwilliams
la source

Réponses:

242

Découvrez la commande arp-scan - vous devrez probablement l'installer, par exemple:

sudo apt-get install arp-scan

http://manpages.ubuntu.com/manpages/hardy/man1/arp-scan.1.html

Et pour donner plus de détails:

sudo arp-scan --interface=eth0 --localnet

Où eth0 est votre appareil. Vous pouvez trouver votre appareil avec:

ifconfig
Linker3000
la source
Parfait, merci. Retourne exactement le format dont j'ai besoin.
Christopher Gwilliams
1
Fonctionne parfaitement sur OSX aussi! Installé avec Brew, et l'interface était en0, plutôt que eth0, mais fonctionne très bien.
nthonygreen
6
Si vous êtes connecté à votre réseau en utilisant le wifi, utilisez wlan0plutôt que eth0.
Neil
3
Pouvez-vous obtenir ceci pour lister les noms d’hôtes ainsi que les adresses IP?
user1527227
2
Il convient de noter que le cache ARP n’est pas utilisé: il effectue une analyse réelle. Contrairement à la plupart des analyses nmap, cela ne peut pas dépasser les limites de la couche 3, ce qui correspond généralement à ce que vous souhaitez dans ce scénario. (En d'autres termes, il est limité à votre sous-réseau.)
Zenexer
111

Utilisez nmap. exemple: nmap -sn 10.10.10.0/24le cache arp ne vous dira que ceux que vous avez essayé de contacter récemment.

Keith
la source
2
10.10.10.0 est mon adresse IP donnée? Quel est 24 dans ce cas? Merci.
Kolonel
4
@ kolonel Ce n'est qu'un exemple. Vous devriez le remplacer par votre réseau. Le 24 est la "notation de barre oblique" du masque de sous-réseau. Cela signifie utiliser 24 bits de la gauche. Cela équivaut à 255.255.255.0.
Keith
2
@ Keith savez-vous comment je pourrais trouver mon adresse réseau à utiliser? Ou est-ce juste mon adresse IP avec 0/24 à la fin?
TMH
20

Dans Windows, cela serait " arp -a" Je pense qu'un équivalent de cela dans Linux serait " arp -e".

Ces informations sont disponibles sur la page de manuel de arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).
David
la source
Cela semble fonctionner (il est peut-être nécessaire de jouer car je suis sur un réseau public et il semble donc ne lister que tous les serveurs du réseau.
Christopher Gwilliams
Si je suis sur un réseau domestique, est-ce que cela va simplement lister les périphériques connectés à mon routeur? Merci!
Christopher Gwilliams
1
Cette commande ne listera que les périphériques du cache arp actuel de l'hôte et ceux-ci seront ceux que l'hôte a contactés récemment.
Linker3000
Les deux fonctionnent sous Linux, mais arp -aaffiche (tous) les hôtes dans un style alternatif (BSD). Simpy en cours arpd'exécution arp -eéquivaut à exécuter parce que c'est la valeur par défaut.
Simplegamer
15

Si votre réseau est 192.168.0.0/24, créez un fichier exécutable avec le code suivant; Changez le 192.168.0en votre réseau actuel.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done
Anders Larsson
la source
Hi Anders ... Le réseau de l'utilisateur peut ne pas être 192.168.0.0/24; J'ai fait une note. La mise en forme du site ne ressemblait pas à un # # dépouillé et a ainsi entravé la mise en forme de l’extrait de code: lors de la saisie du code, utilisez les boutons de citation de bloc ou de texte préformaté et vérifiez si votre réponse est correctement formatée avant de le soumettre, sous forme de retour à la ligne, de tabulation, etc. et des espaces pourraient avoir été dépouillés.
Nevin Williams
De même, lorsque vous fournissez un script qui doit être placé dans un fichier et rendu exécutable, plutôt que simplement coupé-collé, il est probablement préférable de spécifier ceci; Certains ne comprendront peut-être pas tout ce qui est nécessaire pour mettre en œuvre votre solution.
Nevin Williams
12
Techniquement, cela ne renverra que les hôtes qui répondent à un ping. Il se peut que des hôtes soient connectés mais ne répondent pas aux demandes d'écho ICMP. De même, on peut diffuser un paquet sur un réseau entier en spécifiant l'adresse de diffusion, qui est la dernière adresse du réseau IP: ping -c 1 -W 1 192.168.0.255 accomplirait le même but que la boucle for.
Nevin Williams
@NevinWilliams (required -b, retiré -W pour attendre plus longtemps) ping -b -c 1 192.168.0.255résultat "1 paquets transmis, 0 reçus, 100% de perte de paquet, durée 0 ms"
Aquarius Power
13

Essayez d’installer nmap( sudo apt-get install nmap) et tapez en nmap 192.168.1.0/24remplaçant 192.168.1par les trois premières parties de votre adresse IP (découvrez avec ip addr).

Vous pouvez également obtenir une carte légèrement moins précise (selon mon expérience) d'un réseau en exécutant ping 192.168.1.255(à nouveau en remplaçant 192.168.1), qui devrait émettre un pingmessage sur toutes les machines du réseau, mais, selon mon expérience, ne fonctionne pas toujours correctement.

Samadi
la source
En fait, aucune des réponses ne fonctionnera toujours correctement. IP n'a pas été conçu pour répondre à cette exigence. Il existe par exemple des VLAN privés qui empêchent de trouver d'autres hôtes sur le même réseau local.
Ron Maupin
2

Entré avec ce qui suit sur un lien en utilisant tmuxcomme arp-scann'est pas dans le dépôt mais nmapest pré-installé, affiche uniquement les adresses IP:

nmap -sn 192.168.1.1-254/24 | egrep "scan report" | awk '{print $5}'
Zentek
la source
1

Pour une liste plus compacte d'appareils connectés:

nmap -sL 192.168.0.* | grep \(1

Explication.

nmap -sL 192.168.0.* listera toutes les IP du sous-réseau et marquera celles qui ont un nom:

Nmap scan report for 192.168.0.0
Nmap scan report for Dlink-Router.Dlink (192.168.0.1)
Nmap scan report for 192.168.0.2
...
Nmap scan report for android-473e80f183648322.Dlink (192.168.0.53)
...
Nmap scan report for 192.168.0.255

Comme tous les enregistrements intéressants commencent par des parenthèses (et des chiffres 1, nous filtrons pour cela avec | grep \(1(une barre oblique inverse est nécessaire pour échapper à la parenthèse)

Quirk
Méfiez-vous que si deux périphériques portent le même nom, nmapseul celui qui a été connecté au dernier routeur sera affiché.

Alexander Malakhov
la source
Si vous avez exactement la même réponse pour deux questions, il peut être utile de signaler les questions comme étant en double plutôt que d'afficher des réponses en double. De cette façon, les connaissances peuvent être partagées lorsque des questions similaires sont liées.
Mokubai
1
@Mokubai Vous avez raison, j'ai ajouté un commentaire à l'OP. Cela montre un problème intéressant. Une recherche rapide a permis de découvrir 6 doublons (ces liens Q et 5) sur 4 sites de réseau (SU, Ask Ubuntu, SF, Unix). Bien sûr, il y a beaucoup plus! Comment puis-je gérer cela? Idéalement, chacun de ces 6 postes devrait être lié à 5 autres. L'ajout de tous ces liens à la main n'a clairement aucune portée. Donc, pour l'instant j'ai lié à ce post (plus voté). Un autre problème est qu’il est impossible de marquer Q sur AskUbuntu en tant que duplicata du Q sur SU. Hm ... Probablement, cela a déjà été discuté sur la méta?
Alexander Malakhov
ne fonctionne pas pour moi sur Centos 7, mais répertorie toutes les adresses IP possibles du réseau sans nom. arp-scan a fonctionné pour moi.
Jeff
0

Ellaborating sur la réponse de Anders Larrson -

#!/bin/bash
function scan ()
{
    for ip in $1.{1..254}; do
        ping -c 1 -W 1 $ip &
    done | sed -nE 's:^.* from ([0-9.]+).*time=(.*s)$:\1 (\2):p'
}

if [ $1 ]; then
    for baseip; do
        scan $baseip
    done
else
    scan 192.168.1
fi
Mathieu CAROFF
la source