Come trovare tutti gli indirizzi IP utilizzati su una rete

83

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

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

    
posta Eric Carvalho 02.12.2012 - 12:35

5 risposte

127

Generalmente, nmap è abbastanza utile per eseguire rapidamente la scansione delle reti.

Per installare nmap, inserisci il seguente comando nel terminale:

sudo apt-get install nmap

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

nmap -sn 192.168.1.0/24

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

Per le versioni precedenti di Nmap, usa -sP :

nmap -sP 192.168.1.0/24

Per ulteriori riferimenti, consultare le seguenti pagine:

Guida all'installazione di NMAP

Guida di riferimento NMAP

È uno strumento molto utile da imparare.

    
risposta data Kevin Bowen 02.12.2012 - 12:51
36

Se tutti i computer della 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) eseguendo:

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-scan invia i pacchetti ARP alla rete locale e visualizza le risposte ricevute, quindi mostra anche gli host firewall (che bloccano il traffico in base ai pacchetti IP).

    
risposta data Eric Carvalho 02.12.2012 - 16:07
14

Netdiscover può essere la tua risposta.

Per installare tramite terminale:

sudo apt-get install netdiscover

esempio di utilizzo:

sudo netdiscover -r 192.168.1.0/24 -i wlan0

Un IP con MAC Addreses apparirà sul tuo terminale. Guarda lo screenshot

sperotiaiuti

riferimento

    
risposta data SP3B 03.08.2015 - 08:25
14

Nota per il lettore : la risposta originale è stata pubblicata qualche tempo fa e al momento in cui stavo solo imparando lo scripting della shell. Vedi la versione rivisitata di seguito per uno script nuovo e migliorato che esegue molto più velocemente.

Risposta originale

nmap sarebbe la mia scelta n. 1, ma cosa succede se non ce l'hai? Il modo fai-da-te sarebbe con uno script ping che passa manualmente attraverso ogni possibile indirizzo ip sulla rete. Quello che abbiamo qui è solo un ciclo while, dove impostiamo l'ultimo numero nell'indirizzo, eseguiamo un singolo ping silenzioso sull'indirizzo, controlliamo se il comando ha successo o meno (e se ha avuto successo, l'host è ovviamente attivo) e printf dichiarazione. Veloce e sporco, mi ci sono voluti circa 10 minuti per scriverlo, ma il runtime 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 postato questa risposta nell'agosto del 2015. Da allora ho imparato un po 'di più sullo script di shell, e una volta visto questo script, ho pensato che sarebbe stata una buona idea rivisitare questa risposta per aggiungerne alcuni miglioramenti. Ecco alcune idee:

  • Lo script è ovviamente lento e ping attende la risposta dall'host. Di default, ping per due RTT, che può variare a seconda di quanto è congestionata la tua rete, e per quanto ho capito il protocollo TCP raddoppia il tempo di attesa ogni volta (almeno secondo questo ). Quindi potremmo forzare ping a timeout con -w 1 flag. Dato che abbiamo 256 indirizzi e assumiamo 1 secondo per ciascun indirizzo, lo script impiegherà circa 256/60 = 4,27 minuti.

  • Eseguire un comando e catturarne lo stato di uscita con $? non era realmente necessario. % Co_de% può operare direttamente sui comandi. In altre parole, è sufficiente farlo:

    if ping -w 1 -q -c 1 192.168.0.$NUM > /dev/null ;
    then
         <some other code here>
    fi
    
  • Il comando if ... then;...fi 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 printf funziona e appare in molti altri linguaggi, con la citazione di printf variabile. Quotare qui non è necessario - dato che abbiamo a che fare solo con i numeri, non abbiamo bisogno di anticipare la suddivisione delle parole a causa di spazi in una variabile.

  • È possibile ottenere un miglioramento delle prestazioni molto migliore se si generano diversi processi in background. La modifica dello script qui sotto fa esattamente questo. Ho inserito "$NUM" e ping in una funzione, printf (sì, con un nome insulso, lo so). Ora, c'è anche una sola funzione pingf che esegue il looping e il richiamo di main .

#!/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 solo 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 quando Windows 7, penso) ha iniziato a bloccare la risposta alle richieste echo ICMP. Ci sono alcune domande a riguardo su Ask Ubuntu e altri siti del tipo "Ehi, il mio computer Linux può essere pingato, ma non quelli di Windows, che succede?" Basta essere consapevoli del fatto che per le versioni di Windows più recenti è necessario abilitare la risposta all'eco ICMP.
risposta data Sergiy Kolodyazhnyy 03.08.2015 - 09:43
4

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

sudo apt-get install fping

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

Ad esempio, per analizzare gli host di subnet 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.15 a 192.168.1.140 :

fping -g 192.168.1.15 192.168.1.140

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

Controlla man fping per avere più idea.

    
risposta data heemayl 21.02.2016 - 03:21

Leggi altre domande sui tag