Post Image

Scansionare dispositivi connessi alla propria sottorete

Ti è mai capitato di dover capire quanti dispositivi sono connessi alla tua sottorete domestica? Hai dimenticato l'indirizzo IP di un dispositivo al quale vuoi connetterti in SSH? Vuoi vedere se qualche dispositivo indesiderato è riuscito ad entrare nella tua sottorete?

Queste sono solo alcune delle domande tipiche di colui che ha necessità di avere informazioni sulla propria sottorete, ma capire come ottenere le risposte non è molto semplice.

Nell'articolo vedrai come ottenere informazioni utilizzando dei comandi invocati direttamente dalla riga di comando (per gli utenti windows il comando nmap può essere utilizzato scaricando il relativo programma).

L'articolo parte da una configurazione di rete domestica classica ossia si ha un router collegato ad internet e diversi dispositivi collegati al router sia tramite connessione lan(cavo) che wlan(wifi).

Individuazione IP sottorete

Per poter capire quali dispositivi sono presenti nella sottorete, è necessario individuare l'indirizzo di rete, e quindi la relativa sottorete, da scansionare.

L'individuazione dell'indirizzo IP varia per ogni distribuzione linux, nel caso si utilizzi una distribuzione Manjaro Linux, digitare il seguente comando:

sudo ip address | grep -v inet6 | grep inet

il comando restituisce l'elenco degli indirizzi IP mappati sul proprio pc. Nel caso di un dispositivo collegato al router, e quindi all'interno di una sottorete, l'indirizzo IP comincia con 192.168.

Nel caso del mio PC l'output del comando è il seguente:

inet 127.0.0.1/8 scope host lo
inet 192.168.1.177/24 brd 192.168.1.255 scope global dynamic noprefixroute enp0s31f6

l'indirizzo IP del mio PC è 192.168.1.177 e la relativa sottorete è 192.168.1.0/24. Quest'ultimo è l'indirizzo che utilizzo per ricercare dispositivi sulla rete.

Scansione utilizzando nmap

Il software nmap rappresenta un tool molto importante per la scansione delle reti. Il comando è pieno di opzioni che consento molteplici attività. In questo contesto, vedrai i soli comandi che ti consentono di ottenere la lista dei dispositivi connessi alla sottorete.

Un primo comando per la scansione è il seguente:

sudo nmap -sP 192.168.1.0/24

che restituisce come risultato:

Starting Nmap 7.92 ( https://nmap.org ) at 2022-11-05 05:44 CET
Nmap scan report for myfastgate.lan (192.168.1.254)
Host is up (0.00065s latency).
MAC Address: A4:91:B1:E2:AE:B2 (Technicolor Delivery Technologies Belgium NV)
Nmap scan report for tpad.lan (192.168.1.177)
Host is up.
Nmap done: 256 IP addresses (2 hosts up) scanned in 8.03 seconds

l'output mostra due dispositivi connessi alla rete con indirizzo 192.168.1.254(router) e 192.168.1.177(mio pc).

Scansione sottorete

Nell'esempio precedente ho scansionato tutta la sottorete e quindi 256 dispositivi. nmap consente anche una scansione parziale della rete indicando l'intervallo di indirizzi da comprendere.

sudo nmap -sP 192.168.1.2-30

nel caso, il comando verifica solo i dispositivi connessi alla rete e con indirizzo compreso tra 192.168.1.2 e 192.168.1.30.

Scansione nomi associati

Un ulteriore scansione che può essere fatta, che consente di determinare il nome dei dispositivi associati ad un particolare indirizzo IP nella sottorete, è la seguente:

nmap -sL 192.168.1.0/24 | grep \(1

il risultato restituito è il seguente:

Nmap scan report for Galaxy-Note8.lan (192.168.1.118)
Nmap scan report for tpad.lan (192.168.1.177)
Nmap scan report for IT000002398474.lan (192.168.1.235)
Nmap scan report for myfastgate.lan (192.168.1.254)

da notare che i dispositivi elencati non sono necessariamente connessi alla rete nel momento in cui eseguo il comando, ma lo sono stati di recente.

Scansione con script Python

Nella scansione con nmap i comandi devono essere eseguiti come amministratore di sistema, o comunque come utente presente nella lista dei sudoers. Ma se non ho tali privilegi? Non posso vedere chi è presente sulla rete?

Per situazioni di questo tipo, puoi utilizzare questo script Python:

#!/usr/bin/env python

"""List all hosts with their IP address on my subnet."""

import os

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

che consente la visualizzazione dei dispositivi privilegi da amministratore.

L'esecuzione dello script produce il seguente risultato:

1: myfastgate.lan. (192.168.1.254)

Come abbiamo visto, oltre al mio pc, l'unico dispositivo presente nella rete è il router.

Conclusioni

Nell'articolo hai imparato a scansionare una sottorete sia con l'ausilio del software nmap sia utilizzando uno script Python. La scansione potrai eseguirla sia che tu abbia privilegi di amministratore che come utente semplice.

I comandi presentati possono risultare molto utili nei casi in cui si ha bisogno di tenere sotto controllo la propria rete.