Come trovare tutti gli indirizzi IP utilizzati su una rete


94

Nel mio lavoro c'è un sacco di computer e voglio fare uno scherzo. Riesco a chiudere il computer in rete ma trovare indirizzi IP per me è difficile.

Come posso trovare facilmente tutti gli indirizzi IP online da 192.168.1.aa a 192.168.1.zz?


4
provaangry ip scanner
Web-E


2
sul serio? vuoi il nostro aiuto per fare uno scherzo ai tuoi colleghi?
Dan H

Risposte:


141

In generale, nmapè abbastanza utile per scansionare rapidamente le reti.

Per installare nmap, immettere il seguente comando nel terminale:

sudo apt-get install nmap

Una volta installata l'applicazione, immettere il seguente comando:

nmap -sn 192.168.1.0/24

Ciò mostrerà quali host hanno risposto alle richieste di ping sulla rete tra 192.168.1.0 e 192.168.1.255.


Per le versioni precedenti di Nmap, utilizzare -sP:

nmap -sP 192.168.1.0/24

Per riferimenti aggiuntivi, consultare le seguenti pagine:

Guida all'installazione di NMAP

Guida di riferimento NMAP

È uno strumento molto utile per imparare.


2
Non tutti gli host rispondono ai ping. ARP è la strada da percorrere, almeno in IPv4.
Marcin Kaminski,

3
è abbastanza per me e funziona su internet

1
è solo il mio computer o questo comando richiede un'eternità per essere eseguito?
John Merlino,

4
Nota, per velocizzare la scansione di nmap è necessario aggiungere i flag -T4 (velocità) e -n (solo numerici).
Sergiy Kolodyazhnyy il

3
Ricorda che hai bisogno di sudo per il comando nmap, altrimenti verranno restituiti zero risultati.
Machineaddict

40

Se tutti i computer della tua rete sono Ubuntu o qualsiasi altra distribuzione che utilizza avahi-daemon( DNS-SD ), puoi ottenere un elenco dettagliato di essi (con nome host e indirizzo IP) facendo:

avahi-browse -rt _workstation._tcp

Se vuoi conoscere tutti gli indirizzi IP utilizzati nella tua rete, puoi utilizzare arp-scan:

sudo arp-scan 192.168.1.0/24

Poiché non è installato per impostazione predefinita, dovrai installarlo con sudo apt-get install arp-scan. arp-scaninvia pacchetti ARP alla rete locale e visualizza le risposte ricevute, quindi mostra anche gli host con firewall (che bloccano il traffico in base ai pacchetti IP).


3
Questo comando è decisamente migliore di quello sopra. L'esecuzione di nmap ha richiesto secoli, ma questo ha risposto istantaneamente con i nodi nella rete specificata.
John Merlino,

3
Nel mio caso, molto spesso, arp-scannon trova tutti i dispositivi associati alla mia rete wireless. Ora, ad esempio, sudo arp-scan 192.168.2.0/24mostra 2 risultati (.1 e .1), mentre nmap -sn 192.168.2.0/24mostra 4 risultati (.1, .2, .3 e .4). Quindi, sembra che nmapsia più preciso (so per certo che ci sono 4 dispositivi collegati alla rete). Perchè è questo?
Tigeriger89

2
Forse ho trovato la risposta in un commento a un'altra domanda. "Va notato che alcuni dispositivi potrebbero non essere visualizzati a meno che non siano accesi. Il mio Nexus 4 non verrà visualizzato a meno che lo schermo non sia acceso." Tuttavia, è interessante che gli stessi dispositivi rispondano sempre ai ping da nmap.
Tigeriger89

arp-scanè bella !
forzagreen,

17

Nota per il lettore : la risposta originale è stata pubblicata un po 'di tempo fa e al momento in cui stavo solo imparando gli script di shell. Vedi la versione rivista di seguito per uno script nuovo e migliorato che funziona molto più velocemente.

Risposta originale

nmapsarebbe la mia scelta n. 1, ma cosa succede se non ce l'hai? Il modo DIY sarebbe con uno script ping che attraversa manualmente ogni possibile indirizzo IP sulla rete. Quello che abbiamo qui è solo il ciclo while, dove impostiamo l'ultimo numero nell'indirizzo, facciamo un singolo ping silenzioso all'indirizzo, controlla se il comando ha esito positivo o meno (e se ha avuto successo, allora l'host è ovviamente attivo) e l' printfistruzione. Modo rapido e sporco, mi ci sono voluti circa 10 minuti per scriverlo, ma il tempo di esecuzione potrebbe essere un po 'lento, però.

#!/bin/sh
# set -x
NUM=1

while [ $NUM -lt 256  ];do 
    ping -q -c 1 192.168.0.$NUM > /dev/null 
    RESULT=$(echo $?)
    if [ $RESULT -eq 0 ]; then 
        printf 192.168.0.$NUM"\n"
    fi
    NUM=$(expr $NUM + 1)
done

Risposta rivisitata

Originariamente ho pubblicato questa risposta nell'agosto 2015. Da allora ho imparato qualcosa in più sullo scripting della shell e una volta che ho visto questo script, ho pensato che sarebbe stata una buona idea rivedere questa risposta per aggiungere alcuni miglioramenti. Ecco alcune idee:

  • Lo script è ovviamente lento e pingattende la risposta dell'host. Per impostazione predefinita, pingper due RTT, che possono variare a seconda della congestione della rete e, per quanto ne so, il protocollo TCP raddoppia il tempo di attesa ogni volta (almeno in base a questo ). Quindi potremmo forzare pinga uscire con la -w 1bandiera. Poiché abbiamo 256 indirizzi e assumiamo 1 secondo per ciascun indirizzo, lo script richiederà circa 256/60 = 4,27 minuti.

  • Fare un comando e poi catturare il suo stato di uscita con $?non era davvero necessario. Il if ... then;...figrado di operare su comandi direttamente. In altre parole, è sufficiente fare questo:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • Il printfcomando può essere riscritto in questo modo:

    printf "IP %s is up\n" 192.168.0."$NUM"
    

    Questo è più di un cambiamento stilistico, ma è coerente con il modo in cui printffunziona e appare in molte altre lingue, con la quotazione "$NUM"variabile. La citazione qui non è necessaria, poiché abbiamo a che fare solo con i numeri, non è necessario anticipare la divisione delle parole a causa della presenza di spazi in una variabile.

  • Un miglioramento delle prestazioni molto migliore può essere ottenuto se generiamo diversi processi in background. La modifica dello script qui sotto fa esattamente questo. Metto il pinge printfin una funzione, pingf(sì, nome banale, lo so). Ora, c'è anche una singola mainfunzione che esegue il loop e la chiamata di pingf.

#!/bin/sh
# Uncomment for debugging
#set -x
pingf(){
    if ping -w 2 -q -c 1 192.168.0."$1" > /dev/null ;
    then 
        printf "IP %s is up\n" 192.168.0."$1"
    fi
}

main(){

    NUM=1
    while [ $NUM -lt 255  ];do 
        pingf "$NUM" &
        NUM=$(expr "$NUM" + 1)
    done
    wait
}

main

Quanto meglio funziona? Non male, in realtà, richiede pochi secondi.

$ time ./ping_script.sh                                                                      
IP 192.168.0.1 is up
IP 192.168.0.101 is up
IP 192.168.0.27 is up
IP 192.168.0.29 is up
    0m02.50s real     0m00.01s user     0m00.12s system

Cose da tenere a mente

  • Windows (a partire da Windows 7, credo) ha iniziato a bloccare la risposta alle richieste di eco ICMP. Ci sono alcune domande a riguardo su Ask Ubuntu e altri siti del tipo "Ehi, il mio computer Linux può essere eseguito il ping, ma non quelli Windows, che succede?" Basta essere consapevoli del fatto che per le versioni più recenti di Windows è necessario abilitare la risposta all'eco ICMP.

2
Mi piace questo tipo di soluzione
Szenis,


4

fpingè un ottimo strumento per scansionare più host su una rete tramite ICMP. Se non installato, è possibile installarlo tramite:

sudo apt-get install fping

fping invia i pacchetti ECHO_REQUEST ICMP e contrassegna un host come Su se ottiene ECHO_RESPONSE dall'host.

Ad esempio, per scansionare gli host della sottorete 192.168.1.0/24, puoi fare:

fping -g 192.168.1.0/24

Per un numero specifico di host, ad es. Da 192.168.1.15a 192.168.1.140:

fping -g 192.168.1.15 192.168.1.140

fping è altamente configurabile, ad es. quanti pacchetti verranno inviati, il tempo di attesa per la risposta, il formato di output ecc.

Controlla man fpingper avere più idee.

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.