Visualizza l'elenco di computer su una LAN in Linux


62

Sono un appassionato di web che sta cercando di gestire meglio la sicurezza. Sto cercando di trovare un modo (su distribuzioni basate su Linux / Debian) di elencare tutti i computer sulla stessa LAN su cui si trova il mio netbook. Ho provato "arp -n" ma non credo che sia un elenco completo, poiché il mio iPhone si trova sullo stesso router Wi-Fi del mio netbook e non è arrivato. Esiste un modo migliore per ottenere un elenco completo di macchine che condividono tutte lo stesso gateway?


Risposte:


58

Ottieni nmap . È il programma Trinity utilizzato in The Matrix e puoi fare una scansione per trovare tutti i dispositivi collegati alla LAN su cui ti trovi e altro.

Ecco la guida di riferimento.


16
OK. Sembra che "sudo nmap -sL 123.123.123. *" È quello che sto cercando, o forse -sP invece di -sL. Grazie!
CaptSaltyJack,

2
installa nmap consudo apt-get install nmap
saintali il

1
Pensavo che questo fosse in realtà un sito web serio, lol +1
user10089632,

38

Questo è quello che uso, nmap e un indirizzo usando la notazione a blocchi CIDR della rete che si desidera scansionare. Per prima cosa devi installare nmap poiché potrebbe non essere preinstallato con te distro. Su Ubuntu:

sudo apt-get install nmap

Quindi scopri il tuo indirizzo di rete usando ifconfig:

ifconfig

output ifconfig per l'interfaccia che voglio scansionare:

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
          ...

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

192.168.1.0/24

Esegui nmap usando il parametro -sP, che eseguirà la scansione non oltre a controllare se l'host è online:

sudo nmap -sP 192.168.1.0/24

L'output di nmap sarà simile a questo:

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

Ecco, se hai bisogno di ulteriore aiuto con nmap, consulta la documentazione ufficiale di nmap o esegui:

nmap --help 

2
nmap -sA 192.168.1.0/24 L'opzione nmap -sAmostra risultati descrittivi simili con una migliore leggibilità, che include il nome del dispositivo, IP, mac, ecc. come con l'opzione -sP.. Personalmente preferisco -sA su -sP per motivi di leggibilità.
Jayz,

@Jayzcode Sulla mia macchina -sA non ritorna mai, mentre -sP impiega solo 3,73 secondi (rilevato il router, il mio PC e un altro PC). Qualche idea sul perché?
Rodrigo,

17

arp -nmostra solo macchine sulla tua LAN con cui la tua macchina ha già parlato. Puoi ottenere un popolamento di tale elenco eseguendo il ping degli indirizzi multicast di trasmissione e di tutti gli host:

L'indirizzo di trasmissione "tutti" (in binario). Nota che la maggior parte degli stack IP lo tradurrà negli indirizzi di trasmissione della sottorete per tutte le sottoreti a cui sei collegato:

ping 255.255.255.255

L'indirizzo di trasmissione della sottorete per la sottorete corrente. Quindi supponendo che tu sia su 192.168.1.0/24:

ping 192.168.1.255

L'indirizzo multicast "tutti gli host". Mi piace molto perché è più probabile trovare host configurati per altre sottoreti IP, che sono collegate alla stessa LAN Ethernet come te:

ping 224.0.0.1

Si noti che questo metodo e gli altri metodi che ho visto menzionato finora in altre risposte, cercano solo host raggiungibili IP sulla rete corrente. Questo è probabilmente tutto ciò di cui devi preoccuparti, ma è possibile che un utente malintenzionato possa curiosare o fare cose cattive su una rete senza essere visibile tramite IP.


8

ip neighe hosts. NESSUN nmap richiesto / NESSUN sudo richiesto .

Partendo da questo, puoi creare 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))

Scarica tramite

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

(o semplicemente arp... non l'avevo mai visto prima)


o semplicementeip neigh | awk '{ print $1 }' | xargs -n1 host
blockloop,

ip nin breve. Forse meglio ip n | grep REACHABLE.
Pablo A

4

Non ho trovato abbastanza soddisfacenti le risposte esistenti, quindi ho pensato di provare. Dopotutto, le FAQ suggeriscono di fornire un contesto per i collegamenti .

nmapè fantastico, anche se un po 'confuso da usare. Ecco qualcosa che corro per scoprire dispositivi di rete locali che sono per lo più copia-incollabili. nmap -sP(o nmap -sn) scansiona tramite ping . Esistono altre opzioni per "scoperta host", come con nmap -sLo nmap -Pn.

Modo n. 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

Modo n. 2. So che funziona, ma non posso dire se questa è la strada giusta da percorrere.

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 ...>

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


4

Ad esempio, potresti provare a eseguire il ping di tutta una determinata sottorete con un piccolo script di shell Linux

$ 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

Nel mio caso, ho detto UP per tutti e poi ho detto ip nFAILED a tutti.
Pablo A

3

Hunt è uno strumento da riga di comando in grado di creare un elenco di macchine mentre trasmettono informazioni sulla rete. Utilizza i dati TCP, UDP, ICMP e ARP per creare un elenco di indirizzi MAC attivi su una rete. È uno strumento passivo che funziona ascoltando sul filo.


4
So che ci sono pagine man, ma sarebbe utile vedere un esempio nella risposta.
Ehtesh Choudhury,

2

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


2

Per scansionare lo stato di un intervallo di indirizzi IP, questo è semplice e intuitivo:

sudo nmap -sn 192.168.1.2-20

Dove:

         -sn: Ping Scan - disable port scan

Nota:

  • Nelle versioni precedenti di Nmap, -snera noto come-sP

L'ho fatto su Mac OS X (che si basa su BSD). Non sono sicuro che la versione di Linux presenti delle differenze.


1
Fantastico, tutto quello che dovevo fare era digitare: sudo nmap -sP 192.168.178.0-255. Questo ha fatto una scansione nella sottorete in cui mi trovo.
Leo Gerber,

2

È possibile utilizzare fping sudo apt-get install fping (in sistemi operativi simili a Debian).

fping è simile al ping, ma offre prestazioni molto migliori quando si esegue il ping su più host. Il flag -r 1 indica a fping di eseguire solo un round. La parte 2> 1 consente a grep di filtrare l'output.

$ fping -g -r 1 192.168.1.0/24 2>1 | grep "alive"

Visualizzerebbe qualcosa del tipo:

192.168.1.1 is alive
192.168.1.10 is alive
192.168.1.15 is alive
192.168.1.27 is alive

C'è anche un interessante flag per nmap che ti permetterebbe di vedere il fornitore MAC, se noto. Usare con sudo per vedere gli indirizzi MAC.

$ sudo nmap -sP 192.168.1.0/24

Avresti ad esempio:

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

1

1. Soluzione alternativa se le trasmissioni e nmapnon sono disponibili:

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

2a. o chiedi semplicemente al tuo 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. esegue il ping di tutti i dispositivi di rete pingabili nella sottorete 192.168.2.0/24 in parallelo (per ridurre il tempo di esecuzione). Successivamente arpdovrebbe visualizzare ogni dispositivo, che ha risposto.

  2. non verifica 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 254per creare tutti i numeri da 1 a 254 (per tutti i numeri da 100 a 150: seq 100 150)
  • xargschiama pinge sostituisce "IP" ( -iIP) con il seqnumero uence di stdin, quindi 192.168.2.IP cambia in 192.168.2.1 per il primo seqnumero, -Pspecifica il numero di pingprocessi simultanei che xargsdevono iniziare, scelgo lo stesso numero +1 di indirizzi ( = 254) Sono interessato.
  • pingcon l'indirizzo IP modificato da xargs ( 192.168.2.IP) e ping solo una volta ( -c1); -iin questo caso è necessario utilizzare lo stesso identificativo specificato per xargs sull'argomentoIP
  • grep time= per rimuovere ogni riga contenente informazioni superflue, siamo interessati solo alle risposte, che forniscono un tempo di andata e ritorno (= ottenuto una risposta)
  • arp -a per visualizzare coppie nome valido (ip)

Ho chiamato questo il mio comando pingall e l'ho reso disponibile su un alias in ~/.bashrc:

alias pingall='seq 254 | xargs -iIP -P255 ping -c1 192.168.2.IP |grep time='
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.