Recherche d'autres ordinateurs sur le réseau via la ligne de commande


30

J'ai une poignée de Mac sur mon réseau domestique et l'accès shell à un seul d'entre eux depuis l'extérieur. Comment savoir quelle est l'adresse IP des autres machines?

Réponses:


39

Essayez arp -ade voir la table d'arp actuelle de votre ordinateur. Il n'affichera que les adresses IP avec lesquelles votre ordinateur a interagi. Sortie comme ceci (obscurci un peu pour masquer les adresses MAC sur mon réseau):

$ arp -a
? (10.1.168.1) at xx:xx:9e:82:ab:f6 on en1 ifscope [ethernet]
? (10.1.168.16) at xx:xx:29:d3:17:8 on en1 ifscope [ethernet]
? (10.1.168.115) at xx:xx:2:4f:76:14 on en1 ifscope [ethernet]
? (10.1.168.131) at xx:xx:6b:d0:36:a5 on en1 ifscope [ethernet]
? (10.1.168.134) at (incomplete) on en1 ifscope [ethernet]
? (10.1.168.137) at xx:xx:65:46:cd:b8 on en1 ifscope [ethernet]
? (10.1.168.255) at ff:ff:ff:ff:ff:ff on en1 ifscope [ethernet]
? (192.168.4.255) at ff:ff:ff:ff:ff:ff on vmnet8 ifscope [ethernet]
? (192.168.110.255) at (incomplete) on vmnet1 ifscope [ethernet]

Si vous ne disposez pas d'informations supplémentaires sur quel ordinateur est lequel, vous pouvez obtenir un peu plus d'informations en identifiant les fabricants des cartes réseau via la recherche d'adresse MAC .


12
Désolé, il a fallu près de 4 ans pour marquer cela comme correct.
Jon Haddad

Qu'est-ce que cela signifie " arp -an'affichera que les adresses IP avec lesquelles votre ordinateur a interagi". ? Dois-je d'abord envoyer une requête ping à la diffusion (192.168.110.255) et obtenir la réponse de chaque appareil, puis utiliser arp pour obtenir une liste complète, car je viens d'interagir / de faire un ping sur tout l'appareil?
Weishi Zeng

10

En supposant que toutes les autres machines se trouvent dans le même domaine de diffusion que celui auquel vous avez accès, le ping de l'adresse de diffusion suffit souvent. Il ne trouvera pas les machines endormies, ni celles configurées pour ne pas répondre aux pings, ni celles qui répondront aux pings mais pas aux pings de diffusion.

% ifconfig -a | grep broadcast
        inet 192.168.1.241 netmask 0xffffff00 broadcast 192.168.1.255
% ping -i 5 -c 2 192.168.1.255
PING 192.168.1.255 (192.168.1.255): 56 data bytes
64 bytes from 192.168.1.241: icmp_seq=0 ttl=64 time=0.393 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=2.511 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=5.810 ms (DUP!)
64 bytes from 192.168.1.255: icmp_seq=0 ttl=64 time=7.886 ms (DUP!)
64 bytes from 192.168.1.241: icmp_seq=1 ttl=64 time=0.312 ms

--- 192.168.1.255 ping statistics ---
2 packets transmitted, 2 packets received, +3 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.312/3.382/7.886/3.010 ms

La première et la dernière réponse seront presque toujours votre machine locale. Les (DUP!)réponses proviennent d'autres machines (bien que cet exemple montre également une machine répondant avec l'adresse de diffusion elle-même, ce qui n'est pas très utile).

Vous pouvez également essayer l'adresse de diffusion tout-en-un:

% ping -i 5 -c 2 255.255.255.255
PING 255.255.255.255 (255.255.255.255): 56 data bytes
64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.392 ms
64 bytes from 192.168.1.254: icmp_seq=0 ttl=255 time=3.053 ms (DUP!)
64 bytes from 192.168.1.65: icmp_seq=0 ttl=64 time=8.685 ms (DUP!)
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.319 ms

--- 255.255.255.255 ping statistics ---
2 packets transmitted, 2 packets received, +2 duplicates, 0% packet loss
round-trip min/avg/max/stddev = 0.319/3.112/8.685/3.401 ms

Cet exemple montre moins de corruption. Tous les (DUP!)s sont d'autres machines et la machine locale est facilement identifiée comme 127.0.0.1.


8

Vos Mac ont tous des noms d'hôte, vous ne devriez donc pas avoir besoin de connaître les adresses IP. Au lieu de cela, vous utiliserez simplement le nom d'hôte.

Les noms d'hôtes sont basés sur le nom que vous avez donné à l'ordinateur. Donc, si l'ordinateur s'appelle "Jon's Mac", le nom d'hôte que vous utiliserez est quelque chose comme "jons-mac.local".

$ ssh jons-mac.local

Si vous ne connaissez pas déjà les noms d'hôte de vos ordinateurs, vous pouvez trouver les noms d'hôte d'un ordinateur dans les préférences de partage sur cet ordinateur, ou vous pouvez trouver les noms d'hôte d'autres ordinateurs sur le réseau à l'aide de la commande dns-sd. Cette commande utilise Bonjour pour vous permettre de parcourir les services réseau; vous ne trouverez que des ordinateurs qui font de la publicité pour un service réseau (qui, dans l'ensemble, sont les seuls dont vous vous souciez).

Si vous souhaitez vous connecter à un ordinateur fournissant ssh, vous pouvez trouver les ordinateurs disponibles en utilisant:

dns-sd -B _ssh._tcp .

En général, vous pouvez rechercher des hôtes fournissant des services particuliers en utilisant les noms de service: http://www.dns-sd.org/ServiceTypes.html

Le protocole Bonjour offre également la possibilité de parcourir tous les services, pas seulement certains. Vous pouvez le faire en recherchant le service spécial_services._dns-sd._udp

dns-sd -B _services._dns-sd._udp .

La question porte sur la recherche d'autres ordinateurs sur le réseau à partir de la ligne de commande, mais vous pouvez également parcourir les services publiés dns-sd dans l'interface graphique. Par exemple, Terminal.app> Nouvelle connexion à distance ... affiche une fenêtre qui affiche les services ssh, sftp, ftp et telnet annoncés.


À quelle vitesse pouvez-vous attendre l' dns-sd -B _ssh._tcp .exécution de cette commande ?
AJP

1
@AJP Si des services ssh sont annoncés, ils devraient immédiatement renvoyer les résultats. Mais si par «terminer» vous voulez dire sortie, il ne sort pas; la commande exécute une requête de longue durée et génère des modifications en continu à mesure que les services apparaissent et disparaissent du réseau jusqu'à ce que vous le tuiez.
bames53

7

Vous pouvez essayer d'utiliser dns-sdafin d'effectuer des requêtes Bonjour sur le LAN.


3
J'adore le fait que cette réponse soit spécifique à OS X et se connecte à bonjour pour éviter d'obtenir des détails supplémentaires sur le réseau qui ne m'importe pas (dans le contexte de cette question). La commande spécifique qui a fonctionné pour mes besoins était:dns-sd -B _ssh._tcp .
stevenhaddox

6

C'est peut-être un peu exagéré, mais vous pouvez utiliser nmap


1
Bien que cela puisse répondre à la question, ce serait une meilleure réponse si vous pouviez expliquer pourquoi .
DavidPostill

4

Une doublure CLI rapide pour passer à travers / 24 sous-réseau ping chaque adresse IP. Rapide et plutôt sale, mais ça marche.

for (( x=1; x <= 254; x++ )); do ping -c 3 192.168.0.$x; done

Explication: pour modifier la plage, remplacez x = 1 par x = 130, ou tout ce que vous voulez commencer, et 254 jusqu'à la fin, disons 135.

for (( x=130; x <= 135; x++ ));

ping -c 3 envoie trois pings. Pour changer le nombre de pings, changez le 3 en quelque chose d'autre et pour changer la plage d'adresses, changez le 192.168.0 en autre chose.

do ping -c 30 10.10.0.$x;

1
vous pouvez simplement utiliser fping pour le faire:fping -ag 172.16.0.0/16
ıɾuǝʞ

C'est tout sauf rapide, pour moi ...
Max Williams

C'est une solution rapide et sale. Comme dans, il est rapide à implémenter en l'absence des bons outils comme nmap, et ce n'est pas aussi performant que les bons outils, comme nmap. Les hôtes ping peuvent prendre un certain temps lorsqu'ils ne répondent pas, et comme ce n'est pas multithread, cela prendra un certain temps lorsqu'un hôte ne répond pas. Sur le plan positif, cela ne nécessite rien d'autre que bash.
quinnr

2

Si vous connaissez le nom des autres ordinateurs du réseau local, la manière la plus simple est de leur envoyer une requête ping:

$ ping foobar

Pinging foobar.lan [192.168.0.25] with 32 bytes of data:

Reply from 192.168.0.25: bytes=32 time<1ms TTL=64
Reply from 192.168.0.25: bytes=32 time<1ms TTL=64

Cela peut dépendre de votre routeur local ou de votre serveur DHCP. Si le nom d'hôte nu ne fonctionne pas, essayez d'ajouter .local (c'est-à-dire, ping hostname.local ).

Évidemment, cela ne fonctionne pas bien pour les grands réseaux locaux ou les personnes ayant de mauvais souvenirs.


1

Si vous utilisez un Mac, (en supposant que la version 10.5 ou supérieure), activez simplement VNC pour l'accès au bureau et utilisez Flame.app.

http://husk.org/apps/flame/

C'est un petit utilitaire vraiment sympa qui vous donne exactement ce dont vous avez besoin, très rapidement. La seule chose est que vous devrez aller plus loin que SSH.


1

Pour les fenêtres:

1) Écriture: pour / L% I dans (1,1,254) DO ping -w 30 -n 1168.29.0.% I Ceci toutes les adresses de votre réseau local

2) Puis écrivez: arp -a Cela vous donnera toutes les adresses qui ont répondu


Bien sûr, cela dépend de l'adresse de votre réseau local. Dans mon cas, c'est 168.29.0.xxx. Le vôtre pourrait être quelque chose comme 192.168.0.xxx
Chavdar

1
Votre réponse est basée sur Windows alors que l'OP a déclaré qu'il utilisait un Mac. Pouvez-vous modifier votre question pour en tenir compte ou indiquer si votre solution fonctionnerait sur un Mac.
Matthew Williams

Chaque utilisateur MAC a un système d'exploitation Windows assis ... Vous ne pouvez pas vivre sans ...: D
user2173353
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.