2011-07-15 17:51:44 +0000 2011-07-15 17:51:44 +0000
65
65

Visualizza la lista dei computer su una LAN in Linux

Sono un web dev che sta cercando di gestire meglio la sicurezza. Sto cercando di trovare un modo (su distribuzioni basate su Linux/Debian) per elencare tutti i computer sulla stessa LAN su cui si trova il mio netbook. Ho provato “arp -n” ma non mi sembra una lista completa, dato che il mio iPhone è sullo stesso router wi-fi del mio netbook, e questo non è venuto fuori. C'è un modo migliore per avere una lista completa di macchine che condividono tutte lo stesso gateway?

Risposte (11)

61
61
61
2011-07-15 17:55:50 +0000

Prendi nmap . E’ il programma Trinity usato in The Matrix e si può fare una scansione per trovare tutti i dispositivi che sono collegati alla LAN su cui si è connessi e altro ancora. Qui è la guida di riferimento.

41
41
41
2014-12-09 15:56:20 +0000

Questo è ciò che uso, nmap, e un indirizzo che utilizza la notazione a blocchi CIDR della rete che si vuole scansionare. Prima di tutto è necessario installare nmap in quanto potrebbe non essere preinstallato con la distro. Su Ubuntu:

sudo apt-get install nmap
``` ```
ifconfig

Next capire il vostro indirizzo di rete usando l'uscita ifconfig:

wlan1 Link encap:Ethernet HWaddr 00:1f:3b:03:d2:bf  
          inet addr:192.168.1.104 Bcast:192.168.0.255 Mask:255.255.255.0
          inet6 addr: fe80::21f:3bff:fe03:d2bf/64 Scope:Link
          ...

ifconfig per l'interfaccia che voglio scansionare:

192.168.1.0/24

Uso l'addr inet e Mask per capire l'indirizzo di rete in notazione CIDR, più su CIDR qui . L'indirizzo è:

sudo nmap -sP 192.168.1.0/24
``` ```
Starting Nmap 5.21 ( http://nmap.org ) at 2014-12-09 10:52 EST
Nmap scan report for 192.168.1.1
Host is up (0.013s latency).
MAC Address: -MAC ADDRESS- (Cameo Communications)
...
Nmap done: 256 IP addresses (5 hosts up) scanned in 3.26 seconds

Eseguire nmap usando il parametro -sP, che non andrà oltre il controllo se l'host è online:

nmap --help

l'uscita nmap sarà simile a questa:

&001 &001

Questo è tutto, se avete bisogno di più aiuto con nmap, vedere la documentazione ufficiale nmap , o eseguire:

&001

18
18
18
2011-07-15 19:12:18 +0000

arp -n vi mostra solo le macchine sulla vostra LAN con cui la vostra macchina ha già parlato. Potete far sì che la lista si popoli meglio pingingando gli indirizzi broadcast e gli indirizzi multicast di tutti gli host:

L'indirizzo broadcast “tutti” (in binario). Notate che la maggior parte degli stack IP lo tradurrà negli indirizzi broadcast della sottorete per tutte le sottoreti a cui siete collegati:

ping 255.255.255.255

L'indirizzo broadcast della sottorete per la vostra attuale sottorete. Quindi, supponendo che siate su 192.168.1.0/24:

ping 192.168.1.255

L'indirizzo multicast “all hosts”. Questo mi piace molto perché è più probabile che si trovino host configurati per altre sottoreti IP, che per caso sono collegate alla vostra stessa LAN Ethernet:

ping 224.0.0.1
``` &001 


Si noti che questo metodo, e gli altri metodi che ho visto menzionati in altre Risposte finora, cercano solo host IP raggiungibili sulla rete corrente. Probabilmente è tutto ciò di cui si deve preoccupare, ma è possibile che un aggressore possa ficcare il naso, o fare cose cattive, su una rete senza essere visibile via IP.
8
8
8
2017-04-03 21:54:39 +0000

ip neigh e hosts. NO nmap richiesto / NO sudo richiesto.

Basandosi su questo, è possibile costruire uno script Python:

#!/usr/bin/env python

"""List all hosts with their IP adress of the current network."""

import os

out = os.popen('ip neigh').read().splitlines()
for i, line in enumerate(out, start=1):
    ip = line.split(' ')[0]
    h = os.popen('host {}'.format(ip)).read()
    hostname = h.split(' ')[-1]
    print("{:>3}: {} ({})".format(i, hostname.strip(), ip))

Download via

wget https://gist.githubusercontent.com/MartinThoma/699ae445b8a08b5afd16f7d6f5e5d0f8/raw/577fc32b57a7f9e66fdc9be60e7e498bbec7951a/neighbors.py

(o semplicemente arp … Non l'avevo visto prima)

4
4
4
2016-05-10 08:21:24 +0000

Si potrebbe provare a fare pinging di tutte le subnet con un piccolo script di shell linux, per esempio

$ for ip in $(seq 1 254); do ping -c 1 192.168.1.$ip>/dev/null; [$? -eq 0] && echo "192.168.1.$ip UP" || : ; done
4
4
4
2013-12-18 01:44:36 +0000

Non ho trovato le risposte esistenti abbastanza soddisfacenti, così ho pensato di fare un tentativo. Dopo tutto, le FAQ suggeriscono di fornire contesto per i link .

nmap è ottimo, se un po’ confuso da usare. Ecco qualcosa che ho eseguito per scoprire i dispositivi di rete locale che sono per lo più copia-incollabili. nmap -sP (o nmap -sn) scansioni da pinging . Ci sono altre opzioni per la ‘scoperta dell'host’, come con nmap -sL o nmap -Pn.

Via #1.

ehtesh@x200arch:~$ # my wireless interface is listed as wlp3s0. Yours could be wlan0 or eth1.
ehtesh@x200arch:~$ ip addr show wlp3s0 | grep "inet "
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ arp -a
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
ehtesh@x200arch:~$ nmap -sP 172.18.72.0/24
Starting Nmap 6.41SVN ( http://nmap.org ) at 2013-12-17 20:08 EST
Nmap scan report for 172.18.72.2
Host is up (0.017s latency).
<... 15 IP addresses snipped ...>
Nmap scan report for 172.18.72.253
Host is up (0.13s latency).
Nmap done: 256 IP addresses (17 hosts up) scanned in 5.74 seconds
ehtesh@x200arch:~$ arp -a | sort -n -k 1,1                            
? (172.18.72.126) at ec:35:86:4a:37:d2 [ether] on wlp3s0
? (172.18.72.148) at 10:9a:dd:b8:79:71 [ether] on wlp3s0
? (172.18.72.178) at 9c:20:7b:7b:08:ba [ether] on wlp3s0
? (172.18.72.1) at c8:4c:75:76:bd:74 [ether] on wlp3s0
? (172.18.72.253) at b8:78:2e:19:05:0b [ether] on wlp3s0
? (172.18.72.2) at 00:14:1c:da:e1:c2 [ether] on wlp3s0
? (172.18.72.40) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.43) at d8:c7:c8:ce:0f:60 [ether] on wlp3s0
? (172.18.72.44) at d8:c7:c8:ce:0f:68 [ether] on wlp3s0
? (172.18.72.45) at 6c:f3:7f:c6:71:16 [ether] on wlp3s0
? (172.18.72.46) at 6c:f3:7f:c4:4c:b3 [ether] on wlp3s0
? (172.18.72.47) at d8:c7:c8:ca:f9:88 [ether] on wlp3s0
? (172.18.72.48) at 24:de:c6:c6:b6:78 [ether] on wlp3s0
? (172.18.72.49) at 24:de:c6:c6:b6:e6 [ether] on wlp3s0
? (172.18.72.51) at 00:9c:02:d0:4c:4e [ether] on wlp3s0
? (172.18.72.54) at 00:23:76:99:99:bf [ether] on wlp3s0
? (172.18.72.62) at 8c:70:5a:0d:06:18 [ether] on wlp3s0
? (172.18.72.63) at 7c:e9:d3:51:86:55 [ether] on wlp3s0
? (172.18.72.64) at a0:88:b4:47:eb:c8 [ether] on wlp3s0
``` ```
ehtesh@x200arch:~$ #ifconfig | grep broadcast
ehtesh@x200arch:~$ ip address show wlp3s0 | grep brd
    link/ether 00:1e:65:bf:1b:42 brd ff:ff:ff:ff:ff:ff
    inet 172.18.72.53/22 brd 172.18.75.255 scope global wlp3s0
ehtesh@x200arch:~$ ping -b -c 3 -i 20 172.18.75.255
<... similar output to above ...>

Via #2. So che funziona, ma non posso dire se questa è la strada giusta.

&001 &001

Sarei felice di sapere se ci sono modi più efficaci. Fino ad allora, mi atterrò a questo.

3
3
3
2011-07-15 18:16:48 +0000

Hunt è uno strumento a riga di comando in grado di costruire una lista di macchine che trasmettono in rete per informazione. Esso usa dati TCP, UDP, ICMP e ARP per costruire una lista di indirizzi MAC attivi su una rete. È uno strumento passivo che funziona ascoltando sul filo.

3
3
3
2019-05-23 17:18:32 +0000

Si potrebbe usare fping sudo apt-get install fping (in sistemi operativi simili a debian).

fping è simile al ping, ma molto più performante quando si pingano più host. Il flag -r 1 indica a fping di eseguire un solo round. La parte 2>1 permette a grep di filtrare l'uscita.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"
``` ```
192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

Visualizza qualcosa come:

$ sudo nmap -sP 192.168.1.0/24

C'è anche un interessante flag per nmap che permette di vedere il fornitore del MAC - se conosciuto. Utilizzare con sudo per visualizzare gli indirizzi MAC.

Starting Nmap 7.40 ( https://nmap.org ) at 2019-05-23 18:49 CEST
Nmap scan report for 192.168.1.14
Host is up (-0.036s latency).
MAC Address: 20:F4:1B:E5:8F:7B (Shenzhen Bilian electronic)
Nmap scan report for 192.168.1.15
Host is up (-0.084s latency).
MAC Address: A4:31:35:E8:58:9E (Apple)
Nmap scan report for 192.168.1.27
Host is up (-0.15s latency).
MAC Address: 34:8A:7B:38:E3:14 (Samsung Electronics)
Nmap scan report for 192.168.1.29
Host is up (0.010s latency).
MAC Address: 80:2B:F9:75:F8:FF (Unknown)
Nmap scan report for 192.168.1.10
Host is up.
Nmap done: 256 IP addresses (5 hosts up) scanned in 25.52 seconds
``` &001 


Si otterrebbe ad esempio: 


&001
3
3
3
2017-11-08 13:22:31 +0000

1. Soluzione alternativa se le trasmissioni e nmap non sono disponibili:

seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time=
arp -a

2a. o chiedete al vostro server dei nomi di dominio :

seq 254| awk '{print "192.168.2."$1}' |nslookup | grep name

2b. senza awk

echo -e 192.168.2.{1..10}"\n" |nslookup |grep name
  1. ping tutti i dispositivi di rete pingable nella sottorete 192.168.2.0/24 in parallelo (per ridurre il tempo di esecuzione). In seguito arp dovrebbe visualizzare ogni dispositivo, che ha risposto.

  2. non controlla le connessioni attive o correnti, ma elenca tutte le connessioni che il servizio di dominio locale mantiene una voce, anche quelle molto vecchie.

Spiegazione più dettagliata:

  • seq 254 per creare tutti i numeri da 1 a 254 (per tutti i numeri da 100 a 150: seq 100 150)
  • xargs chiama ping e sostituisce “IP” (-iIP) con il numero sequence di stdin, quindi 192. 168.2.IP cambia a 192.168.2.1 per il primo numero seq, -P specifica il numero di processi ping concorrenti xargs dovrebbe iniziare, scelgo lo stesso importo +1 come indirizzi (=254) im interessati.
  • ping con l'indirizzo ip modificato da xargs (192.168.2.IP) e solo ping una volta(-c1); si deve usare lo stesso identificatore specificato per xargs sopra l'argomento -i in questo caso IP
  • grep time= per rimuovere ogni riga contenente informazioni superflue, siamo interessati solo alle risposte, che forniscono un tempo di andata e ritorno (=ha ottenuto una risposta)
  • arp -a per visualizzare coppie di nome(ip) valide

Chiamo questo il mio comando pingall e lo rendo disponibile su un alias in ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
3
3
3
2016-07-25 17:31:07 +0000

Per scansionare lo stato di una serie di indirizzi IP, questo è bello e semplice:

sudo nmap -sn 192.168.1.2-20

Dove:

-sn: Ping Scan - disable port scan

Nota:

  • Nelle precedenti versioni di Nmap, -sn era noto come -sP

L'ho fatto su Mac OS X (che è basato su BSD). Non sono sicuro che la versione per Linux abbia delle differenze.

2
2
2
2016-10-20 10:28:47 +0000

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 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
``` &001 



Poiché tutti i record interessanti iniziano con la parentesi `(` e la cifra `1`, li filtriamo con `| grep \(1` (è necessario un backslash per sfuggire alla parentesi) 

**Quirk** 
Attenzione che se due dispositivi hanno lo stesso nome, `nmap` mostrerà solo quello, che è stato collegato al router _ultimo_