Ricerca di altri computer in rete tramite riga di comando


30

Ho una manciata di Mac sulla mia rete domestica e l'accesso shell solo a uno di loro dall'esterno. Come posso capire quale indirizzo IP delle altre macchine sono?

Risposte:


39

Prova arp -aa vedere l'attuale tabella arp del tuo computer. Mostrerà solo quegli indirizzi IP con cui il tuo computer ha interagito. Output in questo modo (oscurato un po 'per nascondere gli indirizzi MAC sulla mia rete):

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

Se non si dispone di ulteriori informazioni su quale computer è quale, è possibile ottenere un po ' più di informazioni identificando i produttori delle schede di rete tramite la ricerca dell'indirizzo MAC .


12
Mi dispiace, ci sono voluti quasi 4 anni per contrassegnarlo come corretto.
Jon Haddad,

Cosa significa " arp -amostrerà solo gli indirizzi IP con cui il tuo computer ha interagito". ? Devo prima eseguire il ping della trasmissione (192.168.110.255) e ottenere risposta da ogni dispositivo, quindi utilizzare arp per ottenere un elenco completo poiché ho appena interagito / eseguito il ping di tutto il dispositivo?
Weishi Zeng,

10

Supponendo che tutte le altre macchine si trovino nello stesso dominio di trasmissione a cui hai accesso, è spesso sufficiente eseguire il ping dell'indirizzo di trasmissione. Non troverà macchine che dormono, né quelle configurate per non rispondere ai ping, né quelle che risponderanno ai ping ma non a trasmettere ping.

% 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 prima e ultima risposta sarà quasi sempre la tua macchina locale. Le (DUP!)risposte provengono da altre macchine (anche se questo esempio mostra anche alcune macchine che rispondono con l'indirizzo di trasmissione stesso, il che non è molto utile).

Potresti anche provare l'indirizzo di trasmissione all-one:

% 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

Questo esempio mostra meno cruft. Tutte le (DUP!)s sono altre macchine e la macchina locale è facilmente identificabile come 127.0.0.1.


8

Tutti i tuoi Mac hanno nomi host, quindi non dovresti avere bisogno di conoscere gli indirizzi IP. Invece utilizzerai solo il nome host.

I nomi host si basano sul nome che hai assegnato al computer. Quindi, se il computer si chiama "Jon's Mac", il nome host che userete è qualcosa come "jons-mac.local".

$ ssh jons-mac.local

Se non conosci già i nomi host dei tuoi computer, puoi scoprire i nomi host di un computer nelle preferenze di condivisione su quel computer, oppure puoi scoprire i nomi host di altri computer sulla rete usando il comando dns-sd. Questo comando usa Bonjour per farti navigare tra i servizi di rete; troverai solo computer che pubblicizzano effettivamente alcuni servizi di rete (che, in linea di massima, sono gli unici a cui tieni).

Se vuoi connetterti ad alcuni computer che forniscono ssh, puoi trovare i computer disponibili usando:

dns-sd -B _ssh._tcp .

In generale è possibile cercare host che forniscono servizi particolari utilizzando i nomi dei servizi: http://www.dns-sd.org/ServiceTypes.html

Il protocollo Bonjour offre anche la possibilità di cercare tutti i servizi, non solo quelli particolari. Puoi farlo sfogliando il servizio speciale_services._dns-sd._udp

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

La domanda è: trovare altri computer in rete dalla riga di comando, ma è anche possibile sfogliare i servizi pubblicizzati dns-sd nella GUI. Ad esempio Terminal.app> Nuova connessione remota ... visualizza una finestra che mostra i servizi pubblicizzati ssh, sftp, ftp e telnet.


Quanto velocemente puoi aspettare l' dns-sd -B _ssh._tcp .esecuzione di questo comando ?
AJP

1
@AJP Se ​​ci sono servizi di ssh pubblicizzati, dovrebbe iniziare immediatamente a restituire i risultati. Ma se per "fine" intendi uscire, non esce; il comando esegue una query di lunga durata e genera continuamente modifiche man mano che i servizi vengono visualizzati e scompaiono dalla rete fino a quando non vengono eliminati.
bames53,

7

È possibile provare a utilizzare dns-sdper eseguire query Bonjour sulla LAN.


3
Adoro che questa risposta sia specifica per OS X e si agganci al bonjour per evitare di ottenere ulteriori dettagli di rete di cui non mi interesserei (nel contesto di questa domanda). Il comando specifico che ha funzionato per le mie esigenze è stato:dns-sd -B _ssh._tcp .
stevenhaddox,

6

Forse è un po 'eccessivo ma potresti usare nmap


1
Sebbene ciò possa rispondere alla domanda, sarebbe una risposta migliore se tu potessi fornire qualche spiegazione sul perché lo faccia.
DavidPostill

4

Una breve riga di comando CLI per passare da / 24 subnet ping a ciascun indirizzo IP. Veloce e un po 'sporco, ma funziona.

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

Spiegazione: Per cambiare l'intervallo, cambia x = 1 in x = 130, o qualunque cosa tu voglia iniziare, e 254 alla fine, diciamo 135.

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

ping -c 3 viene inviato tre ping. Per cambiare il numero di ping, cambia il 3 in qualcos'altro e per cambiare l'intervallo di indirizzi, cambia il 192.168.0 in qualcos'altro.

do ping -c 30 10.10.0.$x;

1
potresti semplicemente usare fping per fare questo:fping -ag 172.16.0.0/16
ıɾuǝʞ

Questo è tutt'altro che veloce, per me ...
Max Williams

È una soluzione rapida e sporca. Come in, è veloce da implementare in assenza degli strumenti corretti come nmap, e non è performante come gli strumenti corretti, come nmap. Gli host di ping possono richiedere del tempo quando non rispondono e poiché questo non è multithread, ci vorrà del tempo quando un host non risponde. Tra i lati positivi, non richiede nulla oltre a bash.
Quinnr

2

Se conosci il nome degli altri computer nella LAN, il modo più semplice è eseguire il 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

Ciò può dipendere dal router locale o dal server DHCP. Se il nome host nudo non funziona, prova ad aggiungere .local (ovvero ping nomehost.local ).

Ovviamente questo non funziona bene per grandi LAN o persone con scarse memorie.


1

Se stai utilizzando Mac, (supponendo 10.5 o versione successiva), abilita VNC per l'accesso al desktop e usa Flame.app.

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

È una piccola utility davvero bella che ti dà esattamente quello che ti serve, molto velocemente. L'unica cosa è che dovresti andare più lontano di SSH.


1

Per Windows:

1) Scrivi: per / L% I in (1.1.254) DO ping -w 30 -n 1 168,29,0.% I Verrà ping di tutti gli indirizzi nella rete locale

2) Quindi scrivi: arp -a Questo ti darà tutti gli indirizzi a cui hai risposto


Ovviamente dipende dal tuo indirizzo di rete locale. Nel mio caso è 168.29.0.xxx. Il tuo potrebbe essere qualcosa come 192.168.0.xxx
Chavdar,

1
La tua risposta si basa su Windows mentre l'OP ha dichiarato che sta usando un Mac. Puoi modificare la tua domanda per tenerne conto o indicare se la tua soluzione funzionerebbe su un Mac.
Matthew Williams,

Ogni utente MAC ha un sistema operativo Windows in giro ... Non puoi vivere senza di esso ...: D
user2173353
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.