Suchen anderer Computer im Netzwerk über die Befehlszeile

30

Ich habe eine Handvoll Macs in meinem Heimnetzwerk und kann von außen nur auf einen zugreifen. Wie kann ich herausfinden, welche IP-Adresse die anderen Maschinen haben?

Jon Haddad
quelle

Antworten:

39

Versuchen arp -aSie, die aktuelle Arptabelle Ihres Computers anzuzeigen. Es werden nur die IP-Adressen angezeigt, mit denen Ihr Computer interagiert hat. Ausgabe wie folgt (etwas verdeckt, um MAC-Adressen in meinem Netzwerk zu verbergen):

$ 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]

Wenn Sie keine weiteren Informationen darüber haben, welcher Computer welcher ist, können Sie ein wenig mehr Informationen erhalten, indem Sie die Hersteller der Netzwerkkarten über die MAC-Adressensuche identifizieren .

Doug Harris
quelle
12
Es tut uns leid, dass es fast 4 Jahre gedauert hat, um dies als korrekt zu markieren.
Jon Haddad
Was bedeutet es, arp -adass nur die IP-Adressen angezeigt werden, mit denen Ihr Computer interagiert hat ? ? Sollte ich zuerst die Sendung (192.168.110.255) pingen und eine Antwort von jedem Gerät erhalten und dann arp verwenden, um eine vollständige Liste zu erhalten, da ich gerade mit dem gesamten Gerät interagiert / gepingt habe?
Weishi Zeng
10

Angenommen, alle anderen Computer befinden sich in derselben Broadcast-Domäne wie derjenige, auf den Sie Zugriff haben, reicht es häufig aus, die Broadcast-Adresse mit einem Ping zu versehen. Es werden keine Computer gefunden, die im Ruhezustand sind oder die so konfiguriert sind, dass sie nicht auf Pings antworten, oder solche, die auf Pings, aber nicht auf Broadcast-Pings antworten.

% 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

Die erste und letzte Antwort ist fast immer Ihr lokaler Computer. Die (DUP!)Antworten stammen von anderen Computern (obwohl in diesem Beispiel auch einige Computer mit der Broadcast-Adresse selbst antworten, was nicht besonders nützlich ist).

Sie können auch die Broadcast-Adresse für alle versuchen:

% 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

Dieses Beispiel zeigt weniger Cruft. Alle (DUP!)s sind andere Computer, und der lokale Computer kann leicht als 127.0.0.1 identifiziert werden.

Chris Johnsen
quelle
8

Ihre Macs haben alle Hostnamen, sodass Sie die IP-Adressen nicht kennen müssen. Stattdessen verwenden Sie einfach den Hostnamen.

Die Hostnamen basieren auf dem Namen, den Sie dem Computer gegeben haben. Wenn der Computer "Jons Mac" heißt, lautet der verwendete Hostname "jons-mac.local".

$ ssh jons-mac.local

Wenn Sie die Hostnamen Ihrer Computer noch nicht kennen, können Sie die Hostnamen eines Computers in den Freigabeeinstellungen dieses Computers oder die Hostnamen anderer Computer im Netzwerk mit dem Befehl dns-sd ermitteln. Mit diesem Befehl können Sie mithilfe von Bonjour Netzwerkdienste durchsuchen. Sie werden nur Computer finden, die tatsächlich Netzwerkdienste bewerben (die im Großen und Ganzen die einzigen sind, die Sie interessieren).

Wenn Sie eine Verbindung zu einem Computer herstellen möchten, der ssh bereitstellt, können Sie die verfügbaren Computer folgendermaßen ermitteln:

dns-sd -B _ssh._tcp .

Im Allgemeinen können Sie nach Hosts suchen, die bestimmte Dienste bereitstellen, indem Sie die Dienstnamen verwenden: http://www.dns-sd.org/ServiceTypes.html

Das Bonjour-Protokoll bietet auch die Möglichkeit, nach allen Diensten zu suchen , nicht nur nach bestimmten. Sie können dies tun, indem Sie nach dem speziellen Dienst suchen_services._dns-sd._udp

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

Die Frage lautet, ob andere Computer im Netzwerk über die Befehlszeile gefunden werden sollen. Sie können jedoch auch die von dns-sd angekündigten Dienste in der GUI durchsuchen. Beispiel: Terminal.app> Neue Remoteverbindung ... zeigt ein Fenster mit den angekündigten Diensten ssh, sftp, ftp und telnet an.

bames53
quelle
Wie schnell wird dieser Befehl dns-sd -B _ssh._tcp .ausgeführt?
AJP
1
@AJP Wenn für ssh-Dienste geworben wird, sollten die Ergebnisse sofort zurückgegeben werden. Aber wenn Sie mit "Beenden" beenden, bedeutet dies, dass es nicht beendet wird. Der Befehl führt eine langlebige Abfrage aus und gibt Änderungen fortlaufend aus, wenn Dienste im Netzwerk angezeigt und ausgeblendet werden, bis Sie sie beenden.
Bames53
7

Sie können versuchen dns-sd, Bonjour-Abfragen im LAN durchzuführen.

Ignacio Vazquez-Abrams
quelle
3
Ich finde es toll, dass diese Antwort OS X-spezifisch ist und sich an Bonjour anhängt, um nicht zusätzliche Netzwerkdetails zu erhalten, die mir (im Zusammenhang mit dieser Frage) egal sind. Der spezifische Befehl, der für meine Bedürfnisse funktionierte, war:dns-sd -B _ssh._tcp .
Stevenhaddox
6

Vielleicht ist es ein bisschen übertrieben, aber Sie könnten nmap verwenden

Wagnarock
quelle
1
Während dies die Frage beantworten mag, wäre es eine bessere Antwort, wenn Sie eine Erklärung dafür liefern könnten .
DavidPostill
4

Ein schneller CLI-One-Liner zum Durchlaufen von / 24-Subnetz-Pings für jede IP-Adresse. Schnell und irgendwie dreckig, aber es funktioniert.

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

Erläuterung: Um den Bereich zu ändern, ändern Sie x = 1 in x = 130 oder was auch immer Sie beginnen möchten, und 254 bis zum Ende, sagen Sie 135.

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

ping -c 3 sendet drei Pings. Um die Anzahl der Pings zu ändern, ändern Sie die 3 in etwas anderes, und um den Adressbereich zu ändern, ändern Sie die 192.168.0 in etwas anderes.

do ping -c 30 10.10.0.$x;
quinnr
quelle
1
Sie könnten einfach Fping verwenden, um dies zu tun:fping -ag 172.16.0.0/16
Dienstag,
Für mich ist das alles andere als schnell ...
Max Williams
Es ist eine schnelle und schmutzige Lösung. Wie in ist es schnell zu implementieren, wenn die richtigen Tools wie nmap fehlen, und es ist nicht so performant wie die richtigen Tools wie nmap. Das Pingen von Hosts kann eine Weile dauern, wenn sie nicht antworten. Da dies kein Multithreading ist, dauert es eine Weile, bis ein Host nicht antwortet. Auf der positiven Seite ist außer bash nichts erforderlich.
29.
2

Wenn Sie den Namen der anderen Computer im LAN kennen, können Sie sie am einfachsten anpingen:

$ 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

Dies hängt möglicherweise von Ihrem lokalen Router oder DHCP-Server ab. Wenn der bloße Hostname nicht funktioniert, versuchen Sie, .local anzufügen (dh ping hostname.local ).

Offensichtlich funktioniert dies nicht gut für große LANs oder Menschen mit schlechten Erinnerungen.

Quacksalber
quelle
1

Wenn Sie einen Mac verwenden (vorausgesetzt 10.5 oder höher), aktivieren Sie einfach VNC für den Desktop-Zugriff und verwenden Sie Flame.app.

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

Es ist ein wirklich nettes kleines Hilfsprogramm, mit dem Sie schnell genau das bekommen, was Sie brauchen. Das einzige ist, dass Sie weiter als SSH gehen müssten.

tylerm
quelle
1

Für Windows:

1) Schreiben: für / L% I in (1,1,254) DO ping -w 30 -n 1 168,29,0.% I Damit werden alle Adressen in Ihrem lokalen Netzwerk gepingt

2) Dann schreibe: arp -a Dies gibt dir alle Adressen, die geantwortet haben

Chavdar
quelle
Natürlich hängt es von Ihrer lokalen Netzwerkadresse ab. In meinem Fall ist es 168.29.0.xxx. Ihre könnte so etwas wie 192.168.0.xxx
Chavdar
1
Ihre Antwort basiert auf Windows, während das OP angibt, dass er einen Mac verwendet. Können Sie Ihre Frage bearbeiten, um dies zu berücksichtigen, oder angeben, ob Ihre Lösung auf einem Mac funktionieren würde?
Matthew Williams
Jeder MAC Benutzer hat ein Windows - Betriebssystem sitzen ... Sie können nicht ohne sie leben ...: D
user2173353