Come posso elencare tutti gli IP nella rete connessa, preferibilmente tramite Terminale?


219

Usando Ubuntu 10.10, mi chiedevo se esistesse un comando da riga di comando in grado di elencare tutti gli IP dei dispositivi collegati alla rete?

Vorrei usare questo per esempio, per elencare tutti i computer collegati alla mia rete domestica. Idealmente, deve essere a riga di comando poiché lo eseguirò da C ++.

Qualche idea?




Risposte:


243

Dai un'occhiata al comando arp-scan - probabilmente dovrai installarlo, ad esempio:

sudo apt-get install arp-scan

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

E per fornire ulteriori dettagli:

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

Dove eth0 è il tuo dispositivo. Puoi trovare il tuo dispositivo con:

ifconfig

Perfetto, grazie. Restituisce esattamente il formato di cui ho bisogno.
Christopher Gwilliams,

1
Funziona perfettamente anche su OSX! Installato con Brew e l'interfaccia era en0, anziché eth0, ma funziona benissimo.
nthonygreen

6
Se sei connesso alla tua rete usando il wifi usa wlan0invece di eth0.
Neil,

3
Puoi ottenere questo per elencare i nomi host e gli indirizzi IP?
user1527227

2
Vale la pena notare che questo non utilizza la cache ARP: esegue una scansione effettiva. A differenza della maggior parte delle scansioni nmap, questo non può oltrepassare i limiti del layer 3, che di solito è quello che vuoi in questo scenario. (In altre parole, è limitato alla tua sottorete.)
Zenexer,

112

Usa nmap. esempio: nmap -sn 10.10.10.0/24la cache arp ti dirà solo quelli che hai provato a contattare di recente.


2
è il 10.10.10.0 il mio IP dato? Cosa sono 24 in questo caso? Grazie.
Kolonel,

4
@kolonel Questo è solo un esempio. Dovresti sostituirlo con la tua rete. 24 è "notazione slash" della subnet mask. Significa usare 24 bit da sinistra. È equivalente a 255.255.255.0.
Keith,

2
@Keith sai come avrei scoperto il mio indirizzo di rete da usare? O è solo il mio IP con 0/24 alla fine?
TMH il


20

In Windows questo sarebbe " arp -a" Credo che un equivalente di quello in Linux sarebbe " arp -e".

Queste informazioni sono disponibili nella pagina man di arp:

arp with no mode specifier will print the current content of the table.
-e : Use default Linux style output format (with fixed columns).

Sembra che funzioni (potrebbe essere necessario giocare come sono su una rete pubblica, quindi sembra elencare solo tutti i server della rete.
Christopher Gwilliams

Se sono su una rete domestica, elencherà solo i dispositivi collegati al mio router? Grazie!
Christopher Gwilliams,

1
Tale comando elencherà solo i dispositivi nella cache arp corrente degli host e saranno solo quelli che l'host ha contattato di recente.
Linker3000,

Entrambi funzionano su Linux, ma arp -avisualizzano (tutti) host in stile alternativo (BSD). L'esecuzione semplificata arpfa lo stesso perché l'esecuzione è arp -equella predefinita.
Simplegamer,

15

Se la tua rete è 192.168.0.0/24, crea un file eseguibile con il seguente codice; Cambia la 192.168.0tua rete attuale.

#!/bin/bash
for ip in 192.168.0.{1..254}; do
  ping -c 1 -W 1 $ip | grep "64 bytes" &
done

Ciao Anders ... La rete dell'utente potrebbe non essere 192.168.0.0/24; Ho preso una nota. Alla formattazione del sito non piaceva un # nullo! E così ha ostruito la formattazione dello snippet di codice: quando si inserisce il codice, utilizzare i pulsanti di testo blockquote o preformattati e rivedere la risposta per una formattazione corretta prima di inviarlo, come ritorni a capo, schede, e gli spazi potrebbero essere stati spogliati.
Nevin Williams,

Inoltre, quando si fornisce uno script che deve essere inserito in un file e reso eseguibile, piuttosto che semplicemente tagliato e incollato, è probabilmente meglio specificarlo; per alcuni potrebbe non essere ovvio tutto ciò che è necessario per implementare la soluzione.
Nevin Williams,

12
Tecnicamente, questo restituirà solo host che rispondono al ping. Potrebbero esserci host connessi, ma che non rispondono alle richieste di eco ICMP. Inoltre, è possibile trasmettere un pacchetto a un'intera rete specificando l'indirizzo di trasmissione, che è l'ultimo indirizzo nella rete IP: ping -c 1 -W 1 192.168.0.255 compirebbe lo stesso del ciclo for.
Nevin Williams,

@NevinWilliams (richiesto -b, rimosso -W per aspettare di più) ping -b -c 1 192.168.0.255risultato "1 pacchetti trasmessi, 0 ricevuti, perdita di pacchetti del 100%, tempo 0ms"
Aquarius Power

13

Prova a installare nmap( sudo apt-get install nmap) e digita nmap 192.168.1.0/24sostituendo 192.168.1con le prime tre parti del tuo indirizzo IP (scopri usando ip addr).

Puoi anche ottenere una mappa leggermente meno accurata (nella mia esperienza) di una rete eseguendo ping 192.168.1.255(sostituendo di nuovo 192.168.1), che dovrebbe emettere un pinga ogni macchina sulla rete, ma, nella mia esperienza, non sempre funziona correttamente.


In realtà, nessuna delle risposte funzionerà sempre correttamente. L'IP non è stato progettato tenendo presente questo requisito e ci sono cose come le VLAN private che rendono impossibile trovare altri host sulla stessa LAN.
Ron Maupin,

2

È venuto su quanto segue su un nexus usando tmuxas arp-scannon è nel repository ma nmapè stato preinstallato, visualizza solo gli indirizzi IP:

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

1

Per un elenco più compatto dei dispositivi collegati:

nmap -sL 192.168.0.* | grep \(1

Spiegazione.

nmap -sL 192.168.0.* elencherà tutti gli IP nella sottorete e contrassegnerà quelli che hanno il nome:

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

Poiché tutti i record interessanti iniziano con parentesi (e cifre 1, filtriamo per quello con | grep \(1(è necessaria una barra rovesciata per sfuggire alla parentesi)

Fai
attenzione: se due dispositivi hanno lo stesso nome, nmapmostrerà solo quello che è stato collegato per ultimo al router


Se hai la stessa risposta esatta per due domande, potrebbe valere la pena considerare di contrassegnare le domande come duplicate anziché pubblicare risposte duplicate. In questo modo la conoscenza può essere condivisa quando domande simili vengono collegate insieme.
Mokubai

1
@Mokubai Hai ragione, ho aggiunto un commento all'OP. Questo mostra un problema interessante. Una rapida ricerca ha scoperto 6 duplicati (questo Q e 5 collegamenti) attraverso 4 siti di rete (SU, Ask Ubuntu, SF, Unix). Sicuro ce ne sono molti di più! Come posso gestirlo? Idealmente, ognuno di questi 6 post dovrebbe collegarsi ad altri 5. L'aggiunta di tutti questi collegamenti a mano chiaramente non si ridimensiona. Quindi, per ora ho collegato a questo post (il più votato). Un altro problema è che è impossibile contrassegnare Q su AskUbuntu come duplicato di Q su SU. Hm ... Probabilmente, questo è già stato discusso sul meta?
Alexander Malakhov,

non funziona per me su Centos 7, elenca tutti gli indirizzi IP possibili nella rete senza nomi. arp-scan ha funzionato per me.
Jeff,

0

Ellaborando sulla risposta di 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
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.