
whosthere v0.8.3
Strumento di scoperta di reti locali (LAN) con un'interfaccia utente terminale interattiva (TUI) scritto in Go. Scopri, esplora e comprendi la tua LAN in modo intuitivo. Toc toc.. chi è? 🚪
Whosthere
Strumento di rilevamento della rete locale con un'interfaccia utente terminale (TUI) interattiva scritto in Go. Scopri, esplora e comprendi la tua LAN in modo intuitivo.
Whosthere esegue scansioni senza privilegi e concorrenti utilizzando scanner mDNS e SSDP. Inoltre, esegue una scansione della subnet locale tentando connessioni TCP/UDP per attivare la risoluzione ARP, quindi legge la cache ARP per identificare i dispositivi sulla tua rete locale. Questa tecnica popola la cache ARP senza richiedere privilegi elevati. Tutti i dispositivi scoperti vengono arricchiti con ricerche OUI per mostrare i produttori quando disponibili.
Whosthere fornisce un modo amichevole e intuitivo per rispondere alla domanda che ogni amministratore di rete si pone: "Chi c'è sulla mia rete?"

Funzionalità
- TUI interattiva: Naviga e esplora i dispositivi scoperti in modo intuitivo.
- Veloce e concorrente: Sfrutta più metodi di rilevamento contemporaneamente.
- Nessun privilegio elevato richiesto: Funziona interamente nello spazio utente.
- Arricchimento dei dispositivi: Utilizza la ricerca OUI per mostrare i produttori dei dispositivi.
- Scanner di porte integrato: Rilevamento opzionale dei servizi sugli host trovati (scansiona solo i dispositivi con autorizzazione!).
- Modalità demone con API HTTP: Esegui in background e integra con altri strumenti.
- Tema e configurazione: Personalizza l'aspetto e il comportamento tramite file di configurazione YAML.
Installazione
Tramite Homebrew con brew:
brew install whosthere
Su NixOS con nix:
nix profile install nixpkgs#whosthere
Su Arch Linux con yay:
yay -S whosthere-bin
Se il tuo gestore di pacchetti non è elencato, puoi sempre installare con Go:
go install github.com/ramonvermeulen/whosthere@latest
Oppure compila dal sorgente:
git clone https://github.com/ramonvermeulen/whosthere.git
cd whosthere
make build
Inoltre, puoi scaricare i binari precompilati dalla pagina delle release.
Utilizzo
Esegui la TUI per il rilevamento interattivo:
whosthere
Esegui come CLI per una singola scansione e output dei risultati:
whosthere scan -t 5
Output dei risultati in un file JSON:
whosthere scan -t 5 --json --pretty > devices.json
Esegui come demone con API HTTP:
whosthere daemon --port=8080
Opzioni aggiuntive della riga di comando sono disponibili eseguendo:
whosthere --help
Tasti rapidi (TUI)
| Tasto | Azione |
|---|---|
/ | Avvia ricerca regex |
k | Su |
j | Giù |
g | Vai all'inizio |
G | Vai alla fine |
y | Copia IP del dispositivo selezionato |
Y | Copia MAC del dispositivo selezionato |
enter | Mostra dettagli dispositivo |
CTRL+t | Attiva/disattiva selettore tema |
CTRL+i | Attiva/disattiva selettore interfaccia |
CTRL+c/q | Arresta applicazione |
ESC | Cancella ricerca / Torna indietro |
p (vista dettagli) | Avvia scansione porte sul dispositivo |
tab (vista modale) | Cambia selezione pulsante |
Configurazione
Whosthere supporta più metodi di configurazione con la seguente priorità (dalla più alta alla più bassa):
- Flag della riga di comando - Priorità più alta. Vedi
whosthere --helpper i flag disponibili. - Variabili d'ambiente - Prefisso con
WHOSTHERE__. Vedi Configurazione tramite variabili d'ambiente. - File di configurazione - File di configurazione YAML. Vedi File di configurazione.
- Valori predefiniti - Valori predefiniti di fallback. Vedi
DefaultConfig()in config.go.
File di configurazione
Whosthere cerca il file di configurazione nel seguente ordine, utilizzando il primo trovato:
- Percorso specificato tramite flag
--configo variabile d'ambienteWHOSTHERE_CONFIG $XDG_CONFIG_HOME/whosthere/config.yaml(seXDG_CONFIG_HOMEè impostato)~/.config/whosthere/config.yaml(posizione predefinita)
Esempio di configurazione:
# Decommenta la riga successiva per configurare un'interfaccia di rete specifica - utilizza l'impostazione predefinita del sistema se non impostata
# network_interface: eth0
# Quando abilitato, i dispositivi di tutte le interfacce di rete vengono mostrati e persistono quando si cambia interfaccia
# Nota: se due interfacce condividono la stessa subnet (es. entrambe usano 192.168.1.x), i dispositivi potrebbero essere uniti
# poiché sono identificati dall'indirizzo IP. Usare con cautela su subnet sovrapposte.
all_interfaces: false
# Ogni quanto eseguire le scansioni di rilevamento
scan_interval: 20s
# Timeout massimo per ogni scansione, consigliato inferiore all'intervallo di scansione
scan_timeout: 10s
scanners:
mdns:
enabled: true
ssdp:
enabled: true
arp:
enabled: true
sweeper:
enabled: true
interval: 5m
timeout: 20s
port_scanner:
timeout: 5s
# Elenco delle porte TCP da scansionare sui dispositivi scoperti
tcp: [21, 22, 23, 25, 80, 110, 135, 139, 143, 389, 443, 445, 993, 995, 1433, 1521, 3306, 3389, 5432, 5900, 8080, 8443, 9000, 9090, 9200, 9300, 10000, 27017]
splash:
enabled: true
delay: 1s
theme:
# Quando disabilitato, la TUI utilizzerà i colori ANSI predefiniti del terminale
# Vedi anche la variabile d'ambiente NO_COLOR per disabilitare completamente i colori ANSI
enabled: true
# Vedi l'elenco completo dei temi disponibili su https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go
# Imposta "custom" per utilizzare i colori personalizzati sottostanti
# Per qualsiasi colore non configurato, verrà utilizzato il valore predefinito del tema come fallback
name: default
# Disabilita completamente i colori ANSI, sovrascrive theme.enabled
# Può anche essere impostato tramite variabili d'ambiente NO_COLOR o WHOSTHERE__THEME__NO_COLOR
# no_color: false
# Colori del tema personalizzato (decommentare e impostare name: custom per utilizzarli)
# primitive_background_color: "#000a1a"
# contrast_background_color: "#001a33"
# more_contrast_background_color: "#003366"
# border_color: "#0088ff"
# title_color: "#00ffff"
# graphics_color: "#00ffaa"
# primary_text_color: "#cceeff"
# secondary_text_color: "#6699ff"
# tertiary_text_color: "#ffaa00"
# inverse_text_color: "#000a1a"
# contrast_secondary_text_color: "#88ddff"
Variabili d'ambiente
Variabili d'ambiente generali
| Variabile | Descrizione |
|---|---|
WHOSTHERE_CONFIG | Percorso del file di configurazione, per sovrascrivere la posizione predefinita. |
WHOSTHERE_LOG | Imposta il livello di log (es. debug, info, warn, error). Il valore predefinito è info. |
NO_COLOR | Disabilita i colori ANSI nella TUI. |
Configurazione tramite variabili d'ambiente
Qualsiasi opzione di configurazione disponibile nel file YAML può essere impostata tramite variabili d'ambiente utilizzando il
prefisso WHOSTHERE__ (nota il doppio underscore). Le chiavi di configurazione nidificate sono separate da doppi underscore e
le chiavi non fanno distinzione tra maiuscole e minuscole.
Esempi:
WHOSTHERE__SPLASH__ENABLED=false- Disabilita la schermata iniziale, equivalente asplash.enabled: falsenel file YAMLWHOSTHERE__SPLASH__DELAY=2s- Imposta il ritardo della schermata iniziale a 2 secondi, equivalente asplash.delay: 2snel file YAMLWHOSTHERE__SCAN_INTERVAL=30s- Imposta l'intervallo di scansione a 30 secondi, equivalente ascan_interval: 30snel file YAMLWHOSTHERE__SCANNERS__MDNS__ENABLED=false- Disabilita lo scanner mDNS, equivalente ascanners.mdns.enabled: falsenel file YAMLWHOSTHERE__PORT_SCANNER__TCP=80,443,8080- Imposta porte TCP personalizzate da scansionare, equivalente aport_scanner.tcp: [80, 443, 8080]nel file YAMLWHOSTHERE__THEME__NAME=cyberpunk- Imposta il tema su cyberpunk, equivalente atheme.name: cyberpunknel file YAML
Modalità demone API HTTP
Quando si esegue Whosthere in modalità demone, espone un'API HTTP molto semplice con i seguenti endpoint:
| Metodo | Endpoint | Descrizione |
|---|---|---|
| GET | /devices | Ottieni l'elenco di tutti i dispositivi scoperti |
| GET | /device/{ip} | Ottieni i dettagli di un dispositivo specifico |
| GET | /health | Controllo dello stato |
Temi
Il tema può essere configurato tramite il file di configurazione o in fase di esecuzione tramite il tasto CTRL+t.
L'elenco completo dei temi disponibili è disponibile qui, sentiti libero di aprire una PR per aggiungere il tuo tema!
Esempio di configurazione del tema:
theme:
enabled: true
name: cyberpunk
Quando name è impostato su custom, è possibile utilizzare le altre opzioni di colore per creare un tema personalizzato.
Quando l'opzione enabled è impostata su false, la TUI utilizzerà i colori ANSI predefiniti del terminale.
Quando è impostata la variabile d'ambiente NO_COLOR, tutti i colori ANSI saranno disabilitati.
Log
I log vengono scritti nella directory di stato dell'applicazione:
$XDG_STATE_HOME/whosthere/app.log(seXDG_STATE_HOMEè impostato)~/.local/state/whosthere/app.log(fallback Linux/MacOS)%LOCALAPPDATA%/whosthere/app.log(fallback Windows)
Quando non si è in modalità TUI, i log vengono anche scritti sulla console.
Piattaforme
Whosthere è supportato sulle seguenti piattaforme:
- Linux
- macOS
- Windows
Problemi noti
Per far funzionare la funzionalità degli appunti, viene utilizzato un fork di go-clipboard. Assicurati di avere lo strumento di copia appropriato installato per il tuo sistema operativo:
| Sistema operativo | Strumenti di copia supportati |
|---|---|
| Darwin | pbcopy |
| Windows | clip.exe |
| Linux/FreeBSD/NetBSD/OpenBSD/Dragonfly | X11: xsel, xclip Wayland: wl-copy |
Dichiarazione di non responsabilità
Whosthere è pensato per essere utilizzato su reti in cui hai il permesso di eseguire rilevamento e scansione della rete, come la tua rete domestica. La scansione non autorizzata delle reti può essere illegale e non etica. Ottieni sempre la dovuta autorizzazione prima di utilizzare questo strumento su qualsiasi rete.
Questo strumento è stato creato principalmente per scopi educativi e per l'esplorazione della rete domestica. Sebbene funzionale e utile, non deve essere considerato una soluzione di monitoraggio di rete professionale. I risultati si basano su tecniche di scansione senza privilegi e potrebbero non essere esaustivi. Per analisi di rete critiche o valutazioni di sicurezza, considera l'utilizzo di strumenti professionali consolidati con supporto formale.
Contributi
Contributi e suggerimenti come richieste di funzionalità, segnalazioni di bug o miglioramenti sono benvenuti! Sentiti libero di aprire issue o inviare pull request sul repository GitHub. Assicurati di discutere eventuali modifiche importanti su una issue di GitHub prima di implementarle.