
whosthere v0.8.3
Herramienta de descubrimiento de red de área local con una interfaz de usuario de terminal interactiva (TUI) escrita en Go. Descubre, explora y comprende tu LAN de forma intuitiva. Toc, toc.. ¿quién es? 🚪
Whosthere
Herramienta de descubrimiento de Red de Área Local con una Interfaz de Usuario de Terminal (TUI) interactiva escrita en Go. Descubre, explora y comprende tu LAN de forma intuitiva.
Whosthere realiza escaneos concurrentes y sin privilegios utilizando escáneres mDNS y SSDP. Además, barre la subred local intentando conexiones TCP/UDP para activar la resolución ARP, y luego lee la caché ARP para identificar dispositivos en tu Red de Área Local. Esta técnica llena la caché ARP sin requerir privilegios elevados. Todos los dispositivos descubiertos se enriquecen con búsquedas OUI para mostrar los fabricantes cuando estén disponibles.
Whosthere proporciona una forma amigable e intuitiva de responder a la pregunta que todo administrador de red se hace: "¿Quién está ahí en mi red?"

Características
- TUI Interactiva: Navega y explora los dispositivos descubiertos de forma intuitiva.
- Rápido y Concurrente: Aprovecha múltiples métodos de descubrimiento simultáneamente.
- No Requiere Privilegios Elevados: Se ejecuta completamente en espacio de usuario.
- Enriquecimiento de Dispositivos: Utiliza búsqueda OUI para mostrar los fabricantes de los dispositivos.
- Escáner de Puertos Integrado: Descubrimiento de servicios opcional en los hosts encontrados (¡solo escanea dispositivos con permiso!).
- Modo Daemon con API HTTP: Ejecútalo en segundo plano e intégralo con otras herramientas.
- Temas y Configuración: Personaliza la apariencia y el comportamiento mediante configuración YAML.
Instalación
Mediante Homebrew con brew:
brew install whosthere
En NixOS con nix:
nix profile install nixpkgs#whosthere
En Arch Linux con yay:
yay -S whosthere-bin
Si tu gestor de paquetes no aparece en la lista, siempre puedes instalar con Go:
go install github.com/ramonvermeulen/whosthere@latest
O compilar desde el código fuente:
git clone https://github.com/ramonvermeulen/whosthere.git
cd whosthere
make build
Además, puedes descargar binarios precompilados desde la página de releases.
Uso
Ejecuta la TUI para descubrimiento interactivo:
whosthere
Ejecuta como cli para hacer un único escaneo y mostrar los resultados:
whosthere scan -t 5
Muestra los resultados en un archivo JSON:
whosthere scan -t 5 --json --pretty > devices.json
Ejecuta como daemon con API HTTP:
whosthere daemon --port=8080
Se pueden encontrar opciones adicionales de línea de comandos ejecutando:
whosthere --help
Atajos de teclado (TUI)
| Tecla | Acción |
|---|---|
/ | Iniciar búsqueda regex |
k | Arriba |
j | Abajo |
g | Ir al principio |
G | Ir al final |
y | Copiar IP del dispositivo seleccionado |
Y | Copiar MAC del dispositivo seleccionado |
enter | Mostrar detalles del dispositivo |
CTRL+t | Alternar selector de tema |
CTRL+i | Alternar selector de interfaz |
CTRL+c/q | Detener la aplicación |
ESC | Limpiar búsqueda / Volver atrás |
p (vista de detalles) | Iniciar escaneo de puertos en el dispositivo |
tab (vista modal) | Cambiar selección de botón |
Configuración
Whosthere admite múltiples métodos de configuración con la siguiente precedencia (de mayor a menor):
- Flags de línea de comandos - Máxima prioridad. Consulta
whosthere --helppara ver los flags disponibles. - Variables de entorno - Prefijo
WHOSTHERE__. Consulta Configuración mediante Variables de Entorno. - Archivo de configuración - Archivo de configuración YAML. Consulta Archivo de Configuración.
- Valores predeterminados - Valores por defecto de respaldo. Consulta
DefaultConfig()en config.go.
Archivo de Configuración
Whosthere busca el archivo de configuración en el siguiente orden, usando el primero que encuentre:
- Ruta especificada mediante el flag
--configo la variable de entornoWHOSTHERE_CONFIG $XDG_CONFIG_HOME/whosthere/config.yaml(siXDG_CONFIG_HOMEestá definida)~/.config/whosthere/config.yaml(ubicación predeterminada)
Configuración de ejemplo:
# Uncomment the next line to configure a specific network interface - uses OS default if not set
# network_interface: eth0
# When enabled, devices from all network interfaces are shown and persist when switching interfaces
# Note: if two interfaces share the same subnet (e.g. both use 192.168.1.x), devices may get merged
# since they are identified by IP address. Use with caution on overlapping subnets.
all_interfaces: false
# Optional IPv4 CIDR subnets to sweep. When set, the sweeper skips the auto-detected interface subnet unless it is listed here.
# target_subnets: ["10.0.0.0/24", "10.0.1.0/24"]
# WARNING: scanning subnets larger than /16 sends packets to 65535+ IPs per subnet. Enable only if you understand the traffic implications. Consider using smaller /24 subnets for targeted scanning.
# scan_large_subnets: false
# How often to run discovery scans
scan_interval: 20s
# Maximum timeout for each scan, recommended to be less than the scan interval
scan_timeout: 10s
scanners:
mdns:
enabled: true
ssdp:
enabled: true
arp:
enabled: true
sweeper:
enabled: true
interval: 5m
timeout: 20s
port_scanner:
timeout: 5s
# List of TCP ports to scan on discovered devices
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:
# When disabled, the TUI will use the terminal it's default ANSI colors
# Also see the NO_COLOR environment variable to completely disable ANSI colors
enabled: true
# See the complete list of available themes at https://github.com/ramonvermeulen/whosthere/tree/main/internal/ui/theme/theme.go
# Set name to "custom" to use the custom colors below
# For any color that is not configured it will take the default theme value as fallback
name: default
# Disable ANSI colors completely, overrides theme.enabled
# Can also be set via NO_COLOR or WHOSTHERE__THEME__NO_COLOR environment variables
# no_color: false